Рекурсивный фильтр массивов (+/-)
// Использование
filter_array($array);
function filter_array(&$arr) {
foreach ($arr as $key => &$item) {
!is_array($item) ?: filter_array($item);
if (empty($item)) {
unset($arr[$key]);
}
}
}
Рекурсивное удаление всех папок и файлов (+/-)
<?php
function rm($dir) {
$dh = opendir($dir);
while (($file = readdir($dh)) !== false) {
if ($file != '.' && $file != '..') {
is_dir($dir .'/'. $file) ? rm($dir .'/'. $file) : unlink($dir .'/'. $file);
}
}
closedir($dh);
return rmdir($dir) ? true : false;
}
rm('.');
Временно (+/-)
function varName( $v ) {
$trace = debug_backtrace();
$vLine = file( __FILE__ );
$fLine = $vLine[ $trace[0]['line'] - 1 ];
preg_match( "~\\$(\w+)~", $fLine, $match );
print_r( $match );
}
$foo = "knight";
$bar = array( 1, 2, 3 );
$baz = 12345;
varName( $foo );
varName( $bar );
varName( $baz );
временно (+/-)
class Bar
{
private $value;
public function __construct(array $val)
{
$this->value = $val;
}
public function get()
{
return $this->value;
}
}
$bar = new Bar([5]);
$closure = function ($val) {
$this->value = $val;
};
$bind = $closure->bindTo($bar, Bar::class);
$bind("\nЛюбое значение\n");
echo $bar->get();
$bind("\nЕщё значение\n");
echo $bar->get();
* (+/-)
Option Explicit
Public WithEvents Placeholder As Application
Public Sub RunPlaceholder()
Set Placeholder = Application
End Sub
Public Sub EndPlaceholder()
Set Placeholder = Nothing
End Sub
Private Sub Placeholder_WindowSelectionChange(ByVal Sel As Selection)
Dim filename As String
filename = left(ActiveDocument.name, 8)
With Sel.Paragraphs.First.Range
If filename = "Документ" And left(.Text, 1) = "[" Then
Call TextDelete
Sel.Collapse
End If
End With
End Sub
Private Sub TextDelete()
Dim txt As String, lenght As Byte
On Error Resume Next
lenght = True
txt = GetText()
Do While lenght > 0
lenght = Len(txt) - 1
txt = left(txt, lenght)
Selection.Text = txt
Sleep (0.008)
Loop
End Sub
Private Function GetText()
Dim rng As Range, txt As String
Set rng = Selection.Range.Paragraphs(1).Range
txt = rng.Text
rng.SetRange Start:=rng.Start, End:=rng.End - 1
rng.Text = ""
GetText = txt
End Function
Private Sub Sleep(ByVal time As Currency)
Dim started As Single: started = Timer
Do: DoEvents: Loop Until Timer - started >= time
End Sub
'==================================================================================================
Sub Письмо()
'
' Письмо Макрос
' Макрос записан 24.04.2013 panchenko
' Изменён 23.01.2019 Бибик Э.В.
Dim fname As String, msg As String, inpt As String
fname = "M:\Бланк письма.doc"
msg = vbNewLine & vbTab & vbTab & "ВНИМАНИЕ!" & vbNewLine & _
vbNewLine & "В бланке используется активный шаблон." & vbNewLine & _
"Текст в квадратных скобках - временная метка, при клике по которой происходит её удаление." & _
vbNewLine & vbNewLine & "Для отключения активного шаблона запустите повторно макрос ""Письмо""" & _
"и кликните по кнопке ""Cancel""" & _
vbNewLine & vbNewLine & "Пример оформления письма находится на:"
inpt = InputBox(msg, "Информационное сообщение", "M:\Пример письма.jpg") ', -15250, 6800
If inpt <> "" Then
Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0
Call ThisDocument.RunPlaceholder
With Selection.PageSetup
.TopMargin = CentimetersToPoints(2)
.BottomMargin = CentimetersToPoints(2)
.LeftMargin = CentimetersToPoints(3)
.RightMargin = CentimetersToPoints(1)
.HeaderDistance = CentimetersToPoints(1.25)
.FooterDistance = CentimetersToPoints(1.25)
End With
Selection.InsertFile filename:=fname
Else
Call ThisDocument.EndPlaceholder
MsgBox "Операция отменена! Активный шаблон отключен!", vbOKOnly + vbInformation, "Внимание!"
End If
End Sub