Подсказки и приемы по программированию на PHP

Это статья-шпаргалка с примерами по программированию на PHP. Здесь для удобства я собрал приемы и часто используемые мной функции при программировании. Статья будет пополняться по мере необходимости.

 

Форматы вывода даты и времени date

Оглавление

 

Работа с массивами

Создать пустой массив (array)

$arr = array();

Определить, является ли переменная массивом (is_array)

$n = 'qqq';
$m = array('1', '2');
is_array($n); // вернёт false
is_array($m); // вернёт true

Узнать длину массива (количество элементов) (count)

$arr[] = 'ddd';
$arr[] = 'sss';
$cn = count($arr); // вернет 2

Вывести (напечатать) массив (print_r, var_dump)

print_r($arr); // выведет информацию о переменной пригодную для чтения человеком
var_dump($arr); // выведет структурированную информацию о переменной, включая её тип и значение
var_dump($arr, $arr2); // выведет информацию о нескольких переменных

Инвертировать массив (array_reverse)

// возвратить массив с элементами в обратном порядке
$m = array_reverse($m); // инвертировать массив

Проверить входит ли значение в массив (in_array)

in_array($id, array(1, 7, 11, 6)); // возвращает true, если значение $id найдено среди значений массива и false, если значение не найдено

Узнать существует ли ключ массива (array_key_exists)

// функцию array_key_exists невозможно применить для многомерных массивов
$ar = array(3, "leto" => 1, "zima" => 4, "key_null" => null);
$q = array_key_exists("zima", $ar); // вернёт true
$q = array_key_exists("osen", $ar); // вернёт false
$q = array_key_exists(0, $ar); // вернёт true

$q = array_key_exists("key_null", $ar); // вернёт true, так как элемент key_null определён несмотря на то, что он равен null
$q = isset($ar["key_null"]); // вернёт false, так как смотрит только на null

$q = isset($i[4][2]); // вернёт true, если элемент массива $i[4][2] определён

Вставить элемент в начало ассоциативного массива

$m = array("leto" => 5, "vesna" => 4);
$m = ['zima' => 0] + $m; // вернёт массив с элементами в порядке: 'zima' => 0, "leto" => 5, "vesna" => 4

Вставить элемент в определённую позицию массива (array_splice)

$m = array("a", "b", "c", "d");
array_splice($m, 2, 0, 'u'); // добавит после 2-го элемента массива значение 'u', массив станет: "a", "b", "u", "c", "d"

$m2 = array("a", "b", "c", "d");
array_splice($m2, 3, 0, array("u", "z")); // добавит после 3-го элемента массива несколько значений, массив станет: "a", "b", "c", "u", "z", "d"

Добавить один или несколько элементов в начало массива (array_unshift)

// элементы добавятся в начало по порядку их объявления, все числовые ключи начнутся от 0 с учётом новых элементов, при этом строковые ключи не изменятся.
$m = array("leto", "zima");
array_unshift($m, "osen", "vesna"); // массив m станет: "osen", "vesna", "leto", "zima"

Создание и доступ к 2-мерному массиву (массиву хранящему массив) (array)

$arr[] = array('sl1', 'txt', 'link1', 'int', 'NULL');
$arr[] = array('sl2', 'txt', 'link2', 'int', 'NULL');
$arr[] = array('sl3', 'txt', 'link3', 'int', 'NULL');
$nm1 = $arr[0][2]; // вернет link1

Массив с русским и английским алфавитом (array)

$arr = array('а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я');
$arr = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');

Поменять кодировку у всех элементов массива (array_map, mb_convert_encoding)

$a = array_map( function ($val) {return mb_convert_encoding($val, "UTF-8", "CP1251");}, $a ); // поменяет кодировку CP1251 на UTF-8

Получить сумму значений массива (array_sum)

$a = array(2, 4, 6, 8);
$b = array("a" => 1.2, "b" => 2.3, "c" => 3.4);
$q1 = array_sum($a); // вернёт 20
$q2 = array_sum($b); // вернёт 6.9

Получить максимальное или минимальное значение массива (max, min)

$m = array(3,7,2,9,5); // массив может содержать значения разных типов, они будут сравниваться по общим правилам сравнения
$mx = max($m); // выведет 9
$mn = min($m); // выведет 2

Применить функцию ко всем элементам массива (array_map)

$a = array_map("trim", $a); // обрежет боковые пробелы у всех элементов массив
$a = array_map("mb_strtolower", $a); // сделает все буквы строчными у всех элементов массива

Удалить повторяющиеся элементы массива (array_unique)

$b = array_unique($a);

Удалить из массива все элементы, которые встречаются в другом массиве (array_diff)

$rs = array_diff($b, $bd); // удалить из массива $b все элементы, которые встречаются в массиве $bd

Удалить из массива все пустые элементы (array_diff)

$sl = array_diff($sl, array(''));

Удалить элемент из массива по ключу (array_slice, unset)

$mm = array_slice($mm, 1, NULL, TRUE); // удалить первый элемент массива с сохранением ключей
unset($mm[2]); // удалить элемент с ключом 2 из массива (с сохранением ключей)

Объединить нескольких массивов (array_merge)

$ar1 = array("tree" => "pine", 7);
$ar2 = array("x", "tree" => "oak", "animal" => "bear", 5);
$rs = array_merge($ar1, $ar2);
print_r($rs); // выведет массив:
[tree] => oak
[0] => 7
[1] => x
[animal] => bear
[2] => 5
// если в массивах встречаются элементы имеющие одинаковый строковый ключ, то в результирующий массив будет записан один такой элемент со значением из последнего по счёту массива; элементы с одинаковыми числовыми ключами так себя не ведут

$rs2 = array_merge($ar1, $ar2, $ar3);
 // можно объединить любое количество массивов

Вычесть из одного 2-мерного массива другой 2-мерный массив

// вычесть из одного 2-мерного массива другой 2-мерный массив при совпадении всех элементов вложенного подмассива
function array_diff_2mer($ms1, $ms2) {
 $res = $ms1;
 foreach ($ms1 as $key => $val) {
  $cn = count($val); // количество элементов в подмассиве первого массива
  foreach ($ms2 as $key2 => $val2) {
   $cn2 = count($val2); // количество элементов в подмассиве второго массива
   if ($cn == $cn2) { // если количество элементов в подмассивах совпадает
   	$fls = 1;
   	for ($x=0; $x<$cn; $x++) {
   	 if ($val[$x] <> $val2[$x]) {$fls = 0; break;}
	}
   	if ($fls == 1) {unset($res[$key]);}
   }
  }
 }
 return $res;
}
$m = [['2021-10-25','2021-11-27'], ['2022-10-25','2022-11-27'], ['2023-10-25','2023-11-27']];
$d = [['2021-10-25','2021-11-27'], ['2022-10-25','2022-11-27']];
$r = array_diff_2mer($m, $d);
var_dump($r); // вернёт массив с одним элементом [['2023-10-25','2023-11-27']]

Объединить элементы массива в строку (implode)

$ar = array('a', 'b', 'v');
$s = implode("-", $ar);
echo $s; // выведет: a-b-v

Цикл с неизвестным количеством итераций (while)

$pos1 = true;
while ($pos1 !== false) {
  $pos1 = mb_strpos($pg, $fl, $off, 'UTF-8');
  $off = $pos1 + 1;
  echo $pos1 . '<br>';
}

Перебрать все элементы массива (foreach)

foreach ($arr as $key => $val) {
  echo $key . ': ' . $val;
}

Цикл с известным количеством итераций (for)

// возрастающий цикл от 1 до 9
for ($x=1; $x<10; $x++) {
  echo $x . '<br>';
}

// убывающий цикл от 4 до 1
for ($h = 4; $h >= 1; $h--) {
  echo $x . '<br>';
}

Прерывание выполнения цикла (break)

for ($x=1; $x<10; $x++) {
  echo $x . '<br>';
  if ($x == 5) {
    break; // прервёт выполнение цикла на 5-м шаге
  }
}

// break рабртает также внутри цикла foreach

Пропустить шаг в цикле (continue)

for ($x=1; $x<=5; $x++) {
  echo $x . '<br>';
  if ($x == 3) {
    continue; // пропустит все последующие инструкции и сразу перейдёт к следующему шагу цикла
  }
 echo $x . '<br>';
}
// цикл выведет:
// 1
// 2
// 4
// 5

Подсчёт количества повторов в массиве (array_count_values)

$ar = array (1, "hello", 1, "world", "hello");
$ar2 = array_count_values($ar); // возвращает новый ассоциативный массив, ключами которого являются значения исходного массива, а значениями количество их повторений
print_r($ar2); // вернёт массив [1] => 2, [hello] => 2, [world] => 1

Получить повторяющиеся элементы из массива (array_unique, array_diff_assoc)

$ar = array("лето", "зима", "осень", "зима", "осень");
$dupl = array_unique(array_diff_assoc($ar, array_unique($ar)));
print_r($dupl); // вернёт массив [0] => зима, [1] => осень

Сортировка массива по значениям, ключам, возрастанию и убыванию (sort, rsort, asort, arsort, ksort, krsort)

$ar = array("лето", "зима", "осень", "весна");
sort($ar); // отсортирует значения массива по возрастанию
rsort($ar); // отсортирует значения массива по убыванию
asort($ar); // отсортирует значения ассоциативного массива по возрастанию
 с сохранением соответствий ключ - значение
arsort($ar); // отсортирует значения ассоциативного массива по убыванию с сохранением соответствий ключ - значение
ksort($ar); // отсортирует ключи ассоциативного массива по возрастанию
 с сохранением соответствий ключ - значение
krsort($ar); // отсортирует ключи ассоциативного массива по убыванию с сохранением соответствий ключ - значение

Сортировка значений массива на кириллице по алфавиту (sort)

setlocale(LC_ALL, "ru_RU.UTF-8"); // устанавливает русскую локаль с кодировкой UTF-8
$ar = array("лето", "зима", "осень", "весна");
sort($ar, SORT_LOCALE_STRING); // отсортирует кириллицу

Сортировка многомерного массива по столбцу (array_multisort, array_column)

$m[0] = [[2, 2, 3, 4], [7, 2, 3, 4], [1, 2, 3, 4], [3, 2, 3, 4]];
$m[1] = [[8, 6, 3, 4], [1, 3, 3, 4], [1, 7, 3, 4]];

// отсортируем массив по первому столбцу по возрастанию
$st1  = array_column($m[0], 0); // получит значения столбца с индексом 0
array_multisort($st1, SORT_ASC, $m[0]);
print_r($m[0]);
// вывод:
$m[0] = [[1, 2, 3, 4], [2, 2, 3, 4], [3, 2, 3, 4], [7, 2, 3, 4]];

// отсортируем массив по первому столбцу по возрастанию и по второму столбцу по убыванию
$st1  = array_column($m[1], 0); // получит значения столбца с индексом 0

$st2  = array_column($m[1], 1); // получит значения столбца с индексом 1
array_multisort($st1, SORT_ASC, $st2, SORT_DESC, $m[1]);
print_r($m[1]);
// вывод:
$m[1] = [[1, 7, 3, 4], [1, 3, 3, 4], [8, 6, 3, 4]];

Объединить элементы массива в строку с заданным разделителем (implode)

$a = array('лето', 'зима', 'осень', 'весна');
$s = implode(":", $a);
echo $s; // вернёт строку: лето:зима:осень:весна

Работа с математическими, геометрическими функциями

Математические константы

M_PI - константа π: 3.1415
M_E - константа е: 2.7182

Синус и косинус угла (Math.sin, Math.cos)

// функции принимают значение угла в радианах, где 180° = π радиан
$x1 = sin(M_PI / 6); // синус угла 30°
$x2 = cos(M_PI / 2); // синус угла 90°

// на классическом графике x-ось располагается горизонтально слева-направо, y-ось располагается вертикально снизу-вверх

Работа со строками

Установить русскую кодировку для правильной работы строковых функций (setlocale)

setlocale(LC_ALL, "ru_RU.UTF-8"); // ставится в начале php-скрипта

Форматировать число с разделением групп разрядов (number_format)

$n = number_format(1234333, 0, ',', ' '); // выведет 1 234 333
$n = number_format(1234333.43, 2, ',', ' '); // выведет 1 234 333,43

Преобразовать строку в имя переменной (${})

$b = 'test'; // строка
${$b} = 2; // создать переменную из строки и задать ей значение
echo $test; // выведет значение переменной $test

Строковые функции (strlen, trim, stripslashes, mb_convert_encoding, str_replace, mysqli_escape_string, transliterator_create)

$s = strlen($st); // узнать длину строки
$s = mb_strlen($st); // узнать длину строки с учётом кодировки
$st = trim($st); // обрезать начальные и конечные пробелы
$slo = mb_convert_encoding($slo, "UTF-8", "CP1251"); // конвертировать строку из кодировки CP1251 в кодировку UTF-8
$st = str_replace('rn', '', $st); // заменить переносы строки для данных полученных из многострочного текстового поля

$st = mysqli_escape_string($mysqli, $st); // экранировать спецсимволы в строке для записи в БД с учетом соединения с БД в переменной $mysqli
$st = stripslashes($st); // удалить экранирование, которое делает метод POST

$st = transliterator_create('Hex-Any')->transliterate($st); // преобразует HTML-сущности в соответствующие им символы (например русскую букву "Т" в &#1058;)
$st = html_entity_decode($st); // преобразует HTML-сущности в соответствующие им символы (например &#1058; - в русскую букву "Т")

Привести строку к нужному регистру символов (mb_strtolower, mb_strtoupper, ucfirst, mb_ucfirst)

function mb_ucfirst($string, $enc = 'UTF-8') {return mb_strtoupper(mb_substr($string, 0, 1, $enc), $enc) . mb_substr($string, 1, mb_strlen($string, $enc), $enc);}

$st = mb_strtolower($st); // приведет строку к нижнему регистру
$st = mb_strtoupper($st); // приведет строку к верхнему регистру
$st = ucfirst($st); // сделает первую букву строки заглавной (работает только для английского)
$st = mb_ucfirst($st); // сделает первую букву строки заглавной (работает в любой кодировке)

Закодировать и раскодировать символы языковых конструкций html в html-коды (htmlspecialchars, htmlspecialchars_decode)

$st = htmlspecialchars($st, ENT_NOQUOTES, 'UTF-8'); // преобразует (< в &lt;) (> в &gt;) (& в &amp;) одинарные и двойные кавычки не преобразуются так как указан параметр ENT_NOQUOTES
$st = htmlspecialchars_decode($st); // преобразует (&lt; в <) (&gt; в >) (&amp; в &) (&apos; в ') (&quot; в ")

Перевести русский текст в транслит на английском (strtr)

function translit_file($filename) {
 $converter = array(
  'а' => 'a',    'б' => 'b',    'в' => 'v',    'г' => 'g',    'д' => 'd',
  'е' => 'e',    'ё' => 'e',    'ж' => 'zh',   'з' => 'z',    'и' => 'i',
  'й' => 'y',    'к' => 'k',    'л' => 'l',    'м' => 'm',    'н' => 'n',
  'о' => 'o',    'п' => 'p',    'р' => 'r',    'с' => 's',    'т' => 't',
  'у' => 'u',    'ф' => 'f',    'х' => 'h',    'ц' => 'c',    'ч' => 'ch',
  'ш' => 'sh',   'щ' => 'sch',  'ь' => '',     'ы' => 'i',    'ъ' => '',
  'э' => 'e',    'ю' => 'yu',   'я' => 'ya',
  'А' => 'A',    'Б' => 'B',    'В' => 'V',    'Г' => 'G',    'Д' => 'D',
  'Е' => 'E',    'Ё' => 'E',    'Ж' => 'Zh',   'З' => 'Z',    'И' => 'I',
  'Й' => 'Y',    'К' => 'K',    'Л' => 'L',    'М' => 'M',    'Н' => 'N',
  'О' => 'O',    'П' => 'P',    'Р' => 'R',    'С' => 'S',    'Т' => 'T',
  'У' => 'U',    'Ф' => 'F',    'Х' => 'H',    'Ц' => 'C',    'Ч' => 'Ch',
  'Ш' => 'Sh',   'Щ' => 'Sch',  'Ь' => '',     'Ы' => 'Y',    'Ъ' => '',
  'Э' => 'E',    'Ю' => 'Yu',   'Я' => 'Ya',
 );
 $filename = strtr($filename, $converter);
 return $filename;
}
$fl = translit_file('Туманный-Внутренний_мир'); // выведет: Tumanniy-Vnutrenniy_mir

Поиск подстроки в строке (mb_strpos, mb_strrpos)

// в строке $p найти первую позицию подстроки $f, начать поиск слева на право пропустив первые $of символов
$p = 'пам-па-рам-па-рам';
 // строка
$f = '-'; // искомая подстрока
$of = 0; // отступ поиска
$pos1 = mb_strpos($p, $f, $of);
echo '-' . $pos1 . '-'; // выведет 3 (позиция 1-го '-')

// в строке $p найти первую позицию подстроки $f, начать поиск справа налево пропустив первые $of символов
$pos2 = mb_strrpos($p, $f, -6); // начнёт искать с -6 символа (пропустит последние 'па-рам')
echo $ds . '-' . $pos2 . '-'; // выведет 10 (позиция 3-го '-')

// проверка найдена ли подстрока в строке
if ($pos1 === false) {} // если подстрока не найдена
if ($pos1 !== false) {} // если подстрока найдена

Поиск даты в строке по маске (preg_match)

if (preg_match("/[0-9]{4}-[0-9]{2}-[0-9]{2}/", "2022-10-13 14:48:00", $m)) {
 echo $m[0]; // выведет найденную по маске дату: 2022-10-13
}

Поиск массива подстрок в строке (strpos)

function strpos_arr($st, $ar) {
 foreach($ar as $w) {if(($pos = strpos($st, $w))!==false) {return $pos;}}
 return false;
}

$st = 'стр2ока';
$ar = array('q','r','j');
$ar2 = array('q','r','2');
strpos_arr($st, $ar); // вернет false, так как ничего не найдено
strpos_arr($st, $ar2); // вернет 3 - позиция символа 2-ки

Получить подстроку из строки (mb_substr)

$st = mb_substr($str, $st, $dl, 'UTF-8'); // обрезать строку $str начиная с символа под номером $st (счет ведется от 0) длиной $dl символов с учетом кодировки UTF-8

// получить подстроку из строки между начальной позицией и конечной позицией
$p = 'пам-па-рам1-па-рам';
$pos1 = 3; // начальная позиция
$pos2 = 11; // конечная позиция
$r = mb_substr($p, $pos1 + 1, $pos2 - $pos1 - 1);
echo $r; // выведет 'па-рам1'

// получить подстроку из строки от позиции до конца
$p = 'пам-па-рам1-па-рам';
$pos1 = 5; // начальная позиция
echo mb_substr($p, $pos1);
 // выведет 'а-рам1-па-рам'

Удалить все html-теги из строки (str_replace)

// удалить теги, если считать тегами всё что внутри < >
$vl = preg_replace('/(<([^>]+)>)/U', '', $vl);

Удалить символ конца строки в строке (str_replace)

// один из способов обязательно сработает
$st = str_replace(PHP_EOL, "", $st);
$st = str_replace("\r", "", $st); // обязательно в двойных кавычках
$st = str_replace("\n", "", $st); // обязательно в двойных кавычках
$st = str_replace("\r\n", "", $st); // обязательно в двойных кавычках
$st = trim($st); // точно сработает

Удалить концевые символы в строке отличающиеся от пробела (trim)

$st = ',12345.4,';
echo trim($nseg, '4,.'); // вернёт 12345

Оставить в строке только цифры, точки и запятые (preg_replace)

$str = "ннн 123.456,789 ввв";
$str = preg_replace("/[^,.0-9]/", '', $str); // вернёт: 123.456,789

Найти в строке все предложения, где встречается слово " как ", если предложения отделены запятыми.

function kak($bm) {
 $ds = strlen($bm);
 $of = 0; $pos = 0;
 while ($pos >= 0) {
  $pos = strpos($bm, ' как ', $of);
  if ($pos === false) {break;} else {
   $pos1 = strrpos($bm, ',', $pos - $ds);
   $pos2 = strpos($bm, ',', $pos);
   $r = substr($bm, $pos1 + 1, $pos2 - $pos1 - 1);
   echo $r . '<br>';
   $of = $pos2;
  }
 }
}
$bm = 'что-то, лето как маленькая жизнь, что-то, путешествие как свобода, что-то, жизнь как движение, что-то';
kak($bm);

Выведет:
лето как маленькая жизнь
путешествие как свобода
жизнь как движение

Узнать количество вхождений подстроки в строку (mb_substr_count)

$s = 'Привет, привет, привет';
echo mb_substr_count($s, 'вет'); // выведет 3

Преобразовать строку в массив посимвольно (str_split)

$pos1 = true;
$off = 0;
while ($pos1 !== false) {
  $pos1 = mb_strpos($pg, $fl, $off, 'UTF-8');
  if ($pos1 !== false) {
    $off = $pos1 + 1;
    echo $pos1 . '<br>';
  }
}

Преобразовать строку в массив посимвольно (str_split)

// вариант 1
$s = "Hello";
$ar = str_split($s);
print_r($ar); // выведет
    [0] => H
    [1] => e
    [2] => l
    [3] => l
    [4] => o

// вариант 2
echo $s[1]; // выведет 'e', но если строка написана на русском, то такой метод преобразования строки в массив не подойдёт

// вариант 3
$s = "Привет";
$ar = preg_split("//u", $s , -1, PREG_SPLIT_NO_EMPTY); // работает с кириллицей
print_r($ar); // выведет
    [0] => П
    [1] => р
    [2] => и
    [3] => в
    [4] => е
    [5] => т

Преобразовать строку в массив по разделителю (explode)

$s = "лето зима осень весна";
$k = explode(" ", $s);
echo $k[1]; // выведет зима

Работа с базой данных (БД)

Вывести одну строку из БД (mysqli_connect, $mysqli->connect_errno, $mysqli->query, mysqli_fetch_assoc, mysqli_free_result, mysqli_close)

$mysqli = mysqli_connect($host,$user,$pass,$db); // подключение к БД
if ($mysqli->connect_errno) {printf("Connect failed: %s\n", $mysqli->connect_error); exit();} // обработка ошибки подключения к БД
$id = 1; // номер искомой записи
$query = "SELECT elem, atr1 FROM tbl WHERE id = " . $id . ";"; // зададим SQL-запрос
$result = $mysqli->query($query); if (!$result) {printf("Errormessage: %s\n", $mysqli->error);} // выполним SQL-команду
$row = mysqli_fetch_assoc($result); // считаем строку из результата
$el = $row['elem']; // считаем значение столбца elem в строке
$a1 = $row['atr1']; // считаем значение столбца atr1 в строке
echo $el . ' - ' . $a1; // выведем данные
mysqli_free_result($result); // освободим результат
mysqli_close($mysqli); // закроем соединение с БД

Создать переменные по именам полей из MySQL (mysqli_fetch_assoc)

$query = "SELECT id, SUM(pole) AS kol, elem FROM dohod;";
 $result = $mysqli->query($query); if (!$result) {printf("Errormessage: %s\n", $mysqli->error);}
 $z = '';
 while ($row = mysqli_fetch_assoc($result)) {
  foreach ($row as $k => $v) {${$k} = $v;}
 // создаёт в php переменные по именам полей из MySQL
  $z = $z . $id . $kol . $elem;
 // переменные имеют те же имена, что и вывод в SELECT
 }
 mysqli_free_result($result);

Узнать количество строк, возвращённое запросом SELECT (mysqli_num_rows)

$nrs = mysqli_num_rows($result);

Узнать количество строк удаленных вставленных или обновлённых последней командой DELETE, INSERT INTO или UPDATE (mysqli_affected_rows, ROW_COUNT)

$query = "DELETE FROM table_name WHERE id < 3;";
$result = $mysqli->query($query); if (!$result) {printf("Errormessage: %s\n", $mysqli->error);}

// способ 1
$query = "SELECT ROW_COUNT() AS rc;";
$result = $mysqli->query($query); if (!$result) {printf("Errormessage: %s\n", $mysqli->error);}
$row = mysqli_fetch_assoc($result);
$rc = $row['rc'];
 // содержит количество затронутых записей
mysqli_free_result($result);

// способ 2
$rc = mysqli_affected_rows($mysqli);

Узнать id последней строки созданной с помощью sql-команды INSERT INTO ($mysqli->insert_id)

$lid = $mysqli->insert_id;

Алгоритм полного вывода данных из нескольких вложенных таблиц базы данных

Предположим есть 3 сущности: шпаргалки, рубрики, языки. Основными являются шпаргалки, но они принадлежат рубрикам, а рубрики в свою очередь принадлежат языкам. Необходимо вывести все языки и рубрики, учитывая, что у языка может не быть ни одной рубрики, а у рубрики может не быть ни одной шпаргалки. Один запрос всех шпаргалок из базы данных не выведет всех языков и рубрик, а только те, в которых есть шпаргалки. Нужен такой алгоритм:

// сделаем 3 запроса к БД по отдельности для: языков, рубрик, шпаргалок и получим:
// $mlng[$id] = $yaz; // массив по языкам
// $mrub[$id] = [$idy, $rub, $npp]; // массив по рубрикам
// $mas[] = $row; // массив по шпаргалкам

// скомпонуем данные
$yy = '';
foreach ($mlng as $kl => $vl) { // цикл по языкам
 $yy = $yy . ''; // начальные теги для языков
 foreach ($mrub as $kr => $vr) { // цикл по рубрикам
  if ($vr[0] == $kl) { // если рубрика принадлежит языку
   $yy = $yy . ''; // начальные теги для рубрик
   foreach ($mas as $ks => $vs) { // цикл по шпаргалкам
    foreach ($vs as $kh => $vh) {${$kh} = $vh;} // преобразуем поля запроса БД в PHP-переменные
    if ($kr == $idr) { // если шпаргалка принадлежит рубрике
     $yy = $yy . ''; // теги для шпаргалок
     unset($mas[$ks]); // удалим обработанную шпаргалку из массива
    }
   }
   $yy = $yy . ''; // конечные теги для рубрик
   unset($mrub[$kr]); // удалим обработанную рубрику из массива
  }
 }
 $yy = $yy . ''; // конечные теги для языков
}

Адрес страницы и адресная строка

Получить адрес сайта ($_SERVER['HTTP_HOST'], $_SERVER['SERVER_NAME'])

echo $_SERVER['HTTP_HOST']; // вернёт адрес сайта в виде site.ru
echo $_SERVER['SERVER_NAME']; // вернёт адрес сайта в виде site.ru аналогично предыдущему

Работа с файлами и источниками данных

Подключить другой php-файл (include, include_once, require, require_once)

// файл не обязательно должен быть php, таким же образом можно подключить и html-файл

include $_SERVER['DOCUMENT_ROOT'] . '/dir/file.php'; // включит содержимое file.php в текущий скрипт во время выполнения скрипта

include_once $_SERVER['DOCUMENT_ROOT'] . '/dir/file.php'; // включит содержимое file.php в текущий скрипт во время выполнения скрипта только один раз остальные вызовы include_once этого файла будут проигнорированы

require $_SERVER['DOCUMENT_ROOT'] . '/dir/file.php'; // включит содержимое file.php в текущий скрипт во время запуска скрипта

require_once $_SERVER['DOCUMENT_ROOT'] . '/dir/file.php'; // включит содержимое file.php в текущий скрипт во время запуска скрипта 
только один раз остальные вызовы require_once этого файла будут проигнорированы

require_once 'script.php'; // файл лежит в той же папке

Получить путь до корневой папки сайта ($_SERVER['DOCUMENT_ROOT'])

$p = $_SERVER['DOCUMENT_ROOT']; // путь до корневой папки сайта (без / в конце)

Получить имя родительского каталога из указанного пути (dirname)

$q = dirname("/etc/passwd"); // вернёт: /etc - без слэша в конце

Получить файл с уровня выше, чем корневая папка (dirname, $_SERVER['DOCUMENT_ROOT'])

dirname($_SERVER['DOCUMENT_ROOT']) . '/file.php';

Получить содержимое документа из Интернета в строку (file_get_contents)

$pg = file_get_contents('http://site.com/dir/file.php');

Получить содержимое документа из Интернета с имитацией запроса от браузера (curl)

function curl($url) {
$headers = [
'Accept-Language: pl,en-US;q=0.9,en;q=0.8',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
];
$cookie = 'cookie.txt';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_REFERER, 'https://www.wikipedia.org');
curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
if (!file_exists($cookie)){
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
}else{
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
}
$c = curl_exec($ch);
curl_close($ch);
return $c;
}

$pg = curl('https://ya.ru/'); // вернёт содержимое страницы Яндекса будто её запросил браузер, т. е. при запросе передаст все необходимые заголовки

Получить содержимое документа из Интернета с передачей json-данных в запросе и имитацией запроса от браузера (curl, json_encode)

function curl_bin() {
$url = 'https://p2p.binance.com/bapi/c2c/v2/friendly/c2c/adv/search';
$data = [
  "asset" => "USDT",
  "fiat" => "RUB",
  "merchantCheck" => false,
  "page" => 1,
  "payTypes" => ["QIWI"],
  "rows" => 10,
  "tradeType" => "BUY"
];
$data_string = json_encode($data, JSON_UNESCAPED_UNICODE);
$headers = [
'Accept: */*',
'Content-type: application/json',
'Origin: https://p2p.binance.com',
'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
];
$cookie = 'cookie.txt';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_REFERER, 'https://www.wikipedia.org');
curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
if (!file_exists($cookie)) {curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
} else {curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);}
$c = curl_exec($ch);
curl_close($ch);
return $c;
}

$pg = curl_bin(); // вернёт содержимое страницы Binance с передачей json-данных в запросе и будто её запросил браузер, т. е. при запросе передаст все необходимые заголовки

Кодирование и декодирование json-данных для отправки (json_encode, json_decode)

$data = [
  "asset" => "USDT",
  "fiat" => "RUB",
  "merchantCheck" => false,
  "page" => 1,
  "payTypes" => ["QIWI"],
  "rows" => 10,
  "tradeType" => "BUY"
];
$enc = json_encode($data, JSON_UNESCAPED_UNICODE); // кодирование данных (JSON_UNESCAPED_UNICODE - не кодировать многобайтовые символы Unicode, например, русские буквы (по умолчанию они кодируются как uXXXX))
$m = json_decode($enc, true); // раскодирование пришедших json-данных в массив (true - говорит, что раскодированные данные будут доступны как массив, а не как объект)
$q = $m["fiat"]; // выведет RUB

Распарсить данные из формата XML (simplexml_load_string, domDocument, loadXML)

// вариант 1
$h = '<hd_1>123</hd_1><hd_2>йцу</hd_2><hd_3>zxc</hd_3>'; // данные в xml-тегах
$xmld = simplexml_load_string('<?xml version="1.0"?><document>' . $h . '</document>');
$hd_prog = $xmld->hd_1; // вернёт 123
$hd_prav = $xmld->hd_2; // вернёт йцу
$hd_dom = $xmld->hd_3; // вернёт zxc

// вариант 2
$link = "http://www.cbr.ru/scripts/xml_metall.asp?date_req1=01/05/2023&date_req2=11/05/2023"; // ссылка на XML-файл с ценами металлов на ЦБРФ
// выдаёт XML вида:
<Metall FromDate="20230501" ToDate="20230511" name="Precious metals quotations">
<Record Date="03.05.2023" Code="1">
<Buy>5096,74</Buy>
<Sell>5096,74</Sell>
</Record>
<Record Date="03.05.2023" Code="2">
<Buy>63,67</Buy>
<Sell>63,67</Sell>
</Record>
<Record Date="03.05.2023" Code="3">
<Buy>2761,04</Buy>
<Sell>2761,04</Sell>
</Record>
</Metall>

$content = file_get_contents($link); // скачиваем содержимое страницы
$dom = new domDocument("1.0", "cp1251"); // создаём DOM
$dom->loadXML($content); // загружаем в DOM XML-документ
$root = $dom->documentElement; // берём корневой элемент
$childs = $root->childNodes; // получаем список дочерних элементов
$l = $childs->length - 2; // берём 2-й элемент с конца
$zol_dt = $childs->item($l)->getAttribute("Date"); // получаем дату из атрибута записи: 03.05.2023
$zol = $childs->item($l)->childNodes->item(0)->childNodes->item(0)->nodeValue; // получаем значение записи из тега Buy: 63,67

Существует ли папка (is_dir)

if (!is_dir($dir)) {} // проверка на НЕ существование папки
if (is_dir($dir)) {} // проверка на существование папки

Определить директорию, в которой находится php-скрипт (pathinfo)

$path_parts = pathinfo($_SERVER['SCRIPT_FILENAME']);
$dir = $path_parts['dirname']; // директория скрипта без конечного слэша '/'

Задать директорию выполнения скрипта (pathinfo, chdir)

// бывает необходимо при выполнении php-скрипта cron-ом
$path_parts = pathinfo($_SERVER['SCRIPT_FILENAME']);
chdir($path_parts['dirname']);

Вывести имена файлов и вложенных папок из заданной директории (scandir)

foreach (scandir($dir) as $value) {
  if ($value != ".." || $value != ".") {
    echo value  . '<br>';
  }
}

Получить время последнего изменения файла (filemtime)

$vr = filemtime($file_with_dir); // время выдается в формате метки Unix - секунд, прошедших от эпохи Unix

Переименовать файл (rename)

$path_parts = pathinfo($_SERVER['SCRIPT_FILENAME']);
$dir = $path_parts['dirname'].'/dir2/';  
$files = scandir($dir);
$fl = $files[2]; // файл номер 3 (отсчет о нуля)
$oldnm = $dir . $fl;
$newnm = $dir . 'newname.txt';

$rz = rename($oldnm, $newnm); // переименовать файл

Удалить файл (unlink)

unlink($file_with_dir);

Прочитать файл в массив (file)

$a = file($dir . $value); // каждая строка файла станет отдельным элементом массива
foreach ($a as $key => $value) {
  echo $value . '<br>';
}

Перезаписать существующий файл (file, array_diff, fopen, fputs, fclose)

$a = file('111.txt');
$a = array_diff($a, array('')); // удалив пустые строки из массива
$fp = fopen('111.txt', "w");
fputs($fp, implode("", $a)); // объединить массив в строку
fclose($fp);

Выполнить исполняемый серверный shell скрипт из PHP (shell_exec)

echo shell_exec('sh /webpage/domen.com/www/script.sh');

Приём входящих параметров в php-скрипте

Прием значения чекбокс для последующей записи его значения в поле БД с типом boolean (checkbox)

Код html:
<form name="test" method="post" action="script.php">
<input type="checkbox" name="chk" checked="checked" />
<input type="submit" value="Отправить" />
</form>

Код script.php:
if (isset($_REQUEST["chk"])) {$chk = $_REQUEST["chk"];} else {$chk = "0";}
if ($chk === 'on') {$chk = "1";}
// если чекбокс отмечен, то $chk = "1", если не отмечен, то $chk = "0"

$chk = isset($_REQUEST['chk']) ? 1 : 0; // или более короткая запись

Прием нескольких значений списка select с заданным атрибутом multiple (select, multiple)

Код html:

<form name="test" method="post" action="script.php">
<select size="2" multiple name="sel2[]">
<option value="1">Один</option>
<option value="2">Два</option>
<option value="3">Три</option>
</select>
</form>

Код script.php:

if (isset($_REQUEST["sel2"])) {$sel2 = $_REQUEST["sel2"];} // примем входящий параметр
else {$sel2 = 0; echo "значения не выбраны";}
if ($sel2 <> 0) {
  $cn = count($sel2); // длина массива
  for ($i = 0; $i < $cn; $i++) { // перебираем массив
	echo $sel2[$i] . '<br>'; // выводим выбранные значения
  }
}

Прием входящего параметра переданного методами $_POST, $_GET или $_COOKIE (isset, $_REQUEST)

if (isset($_REQUEST['sid'])) {$sid = (int)$_REQUEST['sid'];} else {$sid = 0;}

Работа с функциями

Создать свою функцию (function)

function upd_str($a, $b) {
 global $m; // подключить глобальную переменную
 $ret = $m . $a . $b;
 return $ret;
}
$m = 7;
$st = upd_str(5, 'test'); вызвать функцию

Возвратить несколько значений из функции (return, list)

function upd_str($a, $b) {
 $x = $a + $b;
 $y = $a * $b;
 return array($x, $y) ;
}
list($xx, $yy) = upd_str(4, 3);

Функция с необязательным параметром

// параметр $b не обязателен, по умолчанию = 0
function myfunc($a, $b = 0) {
 // свой код
}

Работа с числами

Получить случайное число (rand)

$rnd = rand(1, 10); // выведет случайное число от 1 до 10 включительно

Склонение слова в зависимости от числа

function sklonenie($p) { // склонение слова в зависимости от числа
 $s = array(' день', ' дня', ' дней');
 $a = array(2,0,1,1,1,2);
 return $s[($p % 100 > 4 && $p % 100 < 20)? 2 : $a[($p % 10 < 5) ? $p % 10 : 5]];
}

$p = 2002;
$a = $p . ' ' . sklonenie($p);
echo $a; // выведет 2002 дня

Округлить число (round, ceil, floor)

// round - округляет по математическим правилам, 2-й параметр - требуемое количество цифр после запятой
// ceil - округляет до целого в большую сторону
// floor - округляет до целого в меньшую сторону

$r = round(2.4); // вернёт 2
$r = round(2.5); // вернёт 3
$r = round(2.455, 2); // вернёт 2.46

$r = ceil(2.5); // вернёт 3
$r = ceil(2.536 * 100) / 100; // вернёт 2.54

$r = floor(2.5); // вернёт 2
$r = floor(2.536 * 100) / 100; // вернёт 2.53

// округление до 0.5
function round2half($x){return ceil($x/0.5)*0.5;}
echo round2half(1.2); // выведет 1.5
echo round2half(1.5); // выведет 1.5
echo round2half(1.9); // выведет 2

// округление до 10
echo floor(37 / 10) * 10; // выведет 30
echo ceil(37 / 10) * 10; // выведет 40

Целочисленное деление и остаток от целочисленного деления (floor)

$z = 27;
$m = floor($z/12); // вернёт 2 - целочисленное деление
$s = $z % 12; // вернёт 3 - остаток от целочисленного деления

Добавить ведущие нули к числу (str_pad)

echo str_pad(7, 2, '0', STR_PAD_LEFT); // выведет: 07
echo str_pad(8, 3, '0', STR_PAD_LEFT); // выведет: 008

Работа с датой и временем

Установить часовой пояс сервера в php-скрипте (date_default_timezone_set)

date_default_timezone_set('Europe/Moscow'); // для корректной работы функций даты и времени

Узнать время выполнения php-скрипта (microtime)

$start = microtime(true);
// тело скрипта
$fin = (microtime(true) - $start);
echo $fin; // выведет время выполнения скрипта в секундах с плавающей точкой

Вывести текущую дату в нужном формате (date)

echo date("d-m-Y H:i:s"); // выведет текущую дату в формате ДД-ММ-ГГГГ ЧЧ:ММ:СС, например 03-05-2023 14:03:07

Получить разницу между датами в днях (DateTime, diff, format)

function rzmd($dt) { // получить разницу между датами в днях (если $dt > текущей даты, то выдаст положительное значение, если наоборот то отрицательное, если даты совпадают то 0)
 $or = new DateTime(date("Y-m-d")); // текущая дата
 $tg = new DateTime($dt);
 $it = $or->diff($tg);
 return (int)$it->format('%R%a');
}
echo rzmd('2021-02-16');

Отнять или прибавить n месяцев к текущей дате - возвратить месяц и год

// функция учитывает: переход на новый год и прибавляет только нужное количество месяцев вне зависимости, сколько в них дней (в отличии от конструкции '+1 month')
function add_m($n) { // отнять или прибавить n месяцев к текущей дате - возвратить месяц и год
 $nm = date("n");
 $ny = date("Y");
 $dt = $ny . '-' . str_pad($nm, 2, '0', STR_PAD_LEFT) . '-01';
 if ($n >= 0) {$z = "+" . $n;} else {$z = "-" . -$n;}
 $db = date("Y-m-d", strtotime($z . " month", strtotime($dt)));
 $dd = explode('-', $db);
 $m = (int)$dd[1];
 $g = $dd[0];
 return array($m, $g);
}
list($m, $g) = add_m(20); // прибавить 20 месяцев
echo $m; // вывести месяц
echo $g; // вывести год

Отнять или прибавить n месяцев к текущей дате - возвратить новую дату

// прибавить или отнять месяцы от даты (чтобы отнять месяцы второй параметр должен быть со знаком минус: -5 например)
// всегда остаёмся внутри месяца, если была передана дата большая, чем количество дней в прибавленном или отнятом месяце, то возвратим последнюю дату месяца
// учитывает високосные года
function plus_minus_mes($d, $n) {
 $nd = date("d", strtotime($d)); // число
 $nm = date("n", strtotime($d)); // месяц
 $ny = date("Y", strtotime($d)); // год
 $dt = $ny . '-' . str_pad($nm, 2, '0', STR_PAD_LEFT) . '-01'; // 1 число переданной даты
 if ($n >= 0) {$z = "+" . $n;} else {$z = "-" . -$n;}
 $db = date("Y-m-d", strtotime($z . " month", strtotime($dt))); // прибавим или отнимем месяцы
 $dd = explode('-', $db);
 $m = (int)$dd[1];
 $g = $dd[0];
 $ped = (int)$nd;
 if ($ped <= 28) {$da = $ped;}
 else {
  $t = date("t", strtotime($db)); // количество дней в месяце
  if ($ped > $t) {$da = $t;} else {$da = $ped;}
 }
 return $g . '-' . str_pad($m, 2, '0', STR_PAD_LEFT) . '-' . str_pad($da, 2, '0', STR_PAD_LEFT);
}
$d2 = plus_minus_mes("1899-12-31", 2); // вернёт 1900-02-28
$d3 = plus_minus_mes("1599-12-31", 2); // вернёт 1600-02-29

Узнать существует ли день в месяце года (strtotime, checkdate)

function day_est($nn, $tm, $tg) { // если заданный день существует в заданном месяце и годе возвратит true
 $dd = date("j", strtotime($tg . "-" . $tm . "-" . $nn)); // день
 if ($nn == $dd) {$fl = true;} else {$fl = false;}
 return $fl;
}

$q = day_est(29, 2, 2021); // вернёт false для 29 февраля 2021 года
$q = day_est(31, 3, 2021); // вернёт true для 31 марта 2021 года

// встроенная в PHP функция
$chh = checkdate($mes, $den, $god); // вернёт false для 29 февраля 2021 года, вернёт true для 31 марта 2021 года

Узнать високосный год или нет

// Каждый год, который делится ровно на 4, является високосным, за исключением годов, которые делятся точно на 100, но эти столетние годы являются високосными, если они делятся точно на 400.
// определить високосный год или нет
function isleap($y) {
 return ((!($y % 4) && ($y % 100)) || (!($y % 400))) ? true : false;
}

echo isleap(2000); // вернёт true
echo isleap(1900); // вернёт false
echo isleap(1700); // вернёт false
echo isleap(1600); // вернёт true
echo isleap(2005); // вернёт false
echo isleap(2024); // вернёт true

Узнать високосный год или нет

// Каждый год, который делится ровно на 4, является високосным, за исключением годов, которые делятся точно на 100, но эти столетние годы являются високосными, если они делятся точно на 400.
// определить високосный год или нет
function isleap($y) {
 return ((!($y % 4) && ($y % 100)) || (!($y % 400))) ? true : false;
}

echo isleap(2000); // вернёт true
echo isleap(1900); // вернёт false
echo isleap(1700); // вернёт false
echo isleap(1600); // вернёт true
echo isleap(2005); // вернёт false
echo isleap(2024); // вернёт true

Задать дату строкой (strtotime)

// задаёт дату и время в секундах от начала эпохи Unix
$d = strtotime("01 Aug 2022"); // задаст 1 августа 2022
$d = strtotime("03/08/2022"); // задаст 8 марта 2022
$d = strtotime("03.08.2022"); // задаст 3 августа 2022

Сравнение дат (strtotime)

$d1 = '2021-02-15'; // заданная дата
$i1 = strtotime($d1); // заданная дата в int
$d2 = date("Y-m-d"); // текущая дата
$i2 = strtotime($d2); // текущая дата в int
if ($i1 < $i2) {echo 'заданная дата меньше чем текущая';}
else {echo 'заданная дата больше чем текущая';}

Прибавить или отнять секунды, минуты, часы, дни или месяцы от даты (strtotime)

// прибавить 5 дней к текущей дате
$d1 = date("Y-m-d", strtotime("+5 days", strtotime(date("Y-m-d"))));

// отнять 5 дней от текущей даты
$d1 = date("Y-m-d", strtotime("-5 days", strtotime(date("Y-m-d"))));

// прибавить 5 месяцев к текущей дате
$d1 = date("Y-m-d", strtotime("+3 month", strtotime(date("Y-m-d"))));

// отнять 5 месяцев от текущей даты
$d1 = date("Y-m-d", strtotime("-3 month", strtotime(date("Y-m-d"))));

// прибавить 10 сек к текущей дате и времени
$d1 = date("Y-m-d", strtotime(date("Y-m-d H:i:s")) + 10);

// прибавить 7 мин к текущей дате и времени
$d1 = date("Y-m-d", strtotime(date("Y-m-d H:i:s")) + 60*7);

// прибавить 18 час к текущей дате и времени
$d1 = date("Y-m-d", strtotime(date("Y-m-d H:i:s")) + 60*60*18);

Получить n-й день недели текущего месяца (strtotime)

function sm_dt($n, $d) {
 $h = array(1 => 'first', 2 => 'second', 3 => 'third', 4 => 'fourth', 5 => 'last');
 $m = array(1 => 'Monday', 2 => 'Tuesday', 3 => 'Wednesday', 4 => 'Thursday', 5 => 'Friday', 6 => 'Saturday', 7 => 'Sunday');
 $s = date('Y-m-d', strtotime($h[$n] . " " . $m[$d] . " of " . date("F") . " " . date("Y")));
 return $s;
}

$d1 = sm_dt(5, 2); // последний вторник текущего месяца
$d2 = sm_dt(3, 5); // 3-я пятница текущего месяца
$d3 = sm_dt(1, 7); // 1-е воскресенье текущего месяца

Количество дней в текущем месяце (date)

$k = date('t'); // дней в текущем месяце всего

Количество дней в текущем месяце (date)

$k = date('U'); // текущая дата и время выраженная в количестве секунд, прошедших с начала Эпохи Unix (1 января 1970 00:00:00 GMT)

Перевод даты в формате базы данных в строку с русскими месяцами

// перевод даты в формате базы данных 1964-02-27 в строку с русскими месяцами 27 фев 1964
function dt2rus($d) {
 $m = array('янв','фев','мар','апр','май','июн','июл','авг','сен','окт','ноя','дек');
 $a = explode('-', $d);
 return (int)$a[2] . ' ' . $m[(int)$a[1]-1] . ' ' . $a[0];
}

Временные функции

Установить задержку выполнения программы (sleep, time_nanosleep)

sleep(1); // отложит исполнение программы на 1 секунду
$nano = time_nanosleep(0, 500000000); // отложит исполнение программы на 0,5 секунды
$nano = time_nanosleep(2, 100000); // отложит исполнение программы на 2 секунды 100 микросекунд

Типы данных, сравнение, присваивание, условные операторы

Приведение типов данных (int, float, bool, string)

echo (int)FALSE; // вернёт 0
echo (int)TRUE; // вернёт 1
echo (int)10.2; // вернёт 10
echo (int)NULL; // вернёт 0
echo (int)"11fde"; // вернёт 11
echo (int)"q123ch"; // вернёт 0
echo (int)"-10.4"; // вернёт -10

echo (float)"12.3"; // вернёт 12.3
echo (float)"11fde"; // вернёт 11

echo (bool)""; // вернёт FALSE
echo (bool)1; // вернёт 
TRUE
echo (bool)0; // вернёт 
FALSE

echo (string)TRUE; // вернёт 1
echo (string)FALSE; // вернёт ""
echo (string)12.4; // вернёт "12.4"

Привести все значения массива к целым числам (array_map, intval)

$a = array(10, '20t', 's15');
$a = array_map("intval", $a);
var_dump($a); // выведет: 10, 20, 0

Разное

Отправка сообщения в Телеграм (file_get_contents)

function to_tg($idu, $msg) { // отправить сообщение в Телеграм
$t = '2222222222:xxxxxxxxxxxxxxxxxxx'; // API-токен Телеграм-бота
$msg = str_replace(PHP_EOL, '%0A', $msg); // замена переносов строки в сообщении на формат переносов строк Телеграма
$tg = 'https://api.telegram.org/bot' . $t . '/sendMessage?chat_id=' . $idu . '&parse_mode=html&text=' . $msg;
 $cnt = file_get_contents($tg);
}
$idu = '11111111'; // id пользователя в Телеграм
to_tg($idu, 'Привет!');

Скачать страницу безголовым Google Chrome на сервере с помощью PHP

// предварительно на сервере нужно установить безголовый Google Chrome, также в папку домена, нужно установить проект chrome-php, далее в скрипте пишем:
require_once $_SERVER['DOCUMENT_ROOT'] . '/chrome-php/vendor/autoload.php';
use HeadlessChromiumBrowserFactory;
$browserFactory = new BrowserFactory();
$browser = $browserFactory->createBrowser();
$page = $browser->createPage();
$page->navigate('https://ya.ru')->waitForNavigation();
$html = $page->getHtml();
echo $html; // выведет содержимое страницы ya.ru
$browser->close();

Поделиться статьей:  

Читайте также статьи из ITШпаргалки по программированию:

Поделитесь своим мнением

Правила сообщений

Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Хороший отзыв
Разумно · Дельно · Опытно · Идейно
Яндекс.Метрика
© 2016 - 2024 Хороший отзыв · Разумно · Дельно · Опытно · Идейно