Полезные функции php которые могут пригодится

Есть у меня заметка о полезных командах в терминале Linux, вот решил завести еще заметку о полезных функций php, буду ее постоянно пополнять.


Вот так можно вычислить разницу во времени, а именно сколько дней, часов, минут, секунд между двух промежутками времени и вывести в удобном формате.
$start = new DateTime("12:15");
$end = new DateTime("15:13");
$interval = $start->diff($end)->format("%H:%I:%S");
echo $interval;
На выводе мы получим 02:58:00, если в формате вывода указать %i то получим минуты без ведущего нуля.

Перевести секунды в часы минуты секунды можно при помощи gmdate
gmdate('H:i:s', 999);
На выходе получим 00:16:39

Если нам нужно сохранить полученные данные для дальнейшего импорта можно использовать функцию var_export, допустим у нас есть массив $country, записать его в файл можно следующим образом
file_put_contents('import.php','<?php $country = ' . var_export($country, true) . ';');
Для использования подключаем файл require или include и пользуемся $country.

Можно еще так
file_put_contents('import.php','<?php return ' . var_export($country, true) . ';');
Тогда при подключении сразу будет возвращен массив.

Так же можно использовать serialize и unserialize
Записать данные в файл
file_put_contents($filename, serialize($country))
Получить
$country = unserialize(file_get_contents($filename));
Сортировка массива по значениям ключей
php 7.1
usort($array, function ($item1, $item2) {
    return $item2['key'] <=> $item1['key'];
});
php 5.6
usort($events, function ($a, $b) {
    if ($a['sort'] == $b['sort']) {
        return 0;
    }
    return ($a['sort'] < $b['sort']) ? -1 : 1;
 });

Перевод строчного времени 14 января 2019 или 14 янв 2019 если убрать пробелы 14января2019 то работать тоже будет в Unix Time при помощи ICU
$offset = date_create()->getOffset() / -3600;
$timezone = 'Etc/GMT' . ($offset > 0 ? '+'.$offset : (string)$offset);
$fmt = new IntlDateFormatter(
    'ru_RU',
    IntlDateFormatter::SHORT,
    IntlDateFormatter::SHORT,
    $timezone,
    IntlDateFormatter::GREGORIAN,
    'd MMMM y'
);
Сделать из многомерного массива одномерный в одну строку
call_user_func_array('array_merge', $arrIn);
Поиск в многомерном массиве
$key = array_search('needle', array_column($array, 'column'));
Но имейте ввиду: array_column создаст новый массив из ключей column и если у вас заданные ключи, то данный метод может вам вернет не то что вы ожидаете.

Получить множественные вхождения needle в многомерном массиве, просто меняем местами параметры
$keys = array_keys(array_column($array, 'column'), 'needle');
Провел пару тестов, все равно самый быстрый поиск в многомерном массиве из 10к элементов это foreach, так же пробовал array_column выносить в отдельну переменную скорости это не прибавляет
Результаты тестов
php 7.1
Use #array_search, array_column as var# search ID 8414 
Time:  0.00206 Seconds
Use #array_search# search ID 8414 
Time:  0.00344 Seconds
Use #foreach# search ID 8414 
Time:  0.00238 Seconds
php 7.2
Use #array_search, array_column as var# search ID 8414 
Time:  0.00380 Seconds
Use #array_search# search ID 8414 
Time:  0.00549 Seconds
Use #foreach# search ID 8414 
Time:  0.00256 Seconds
php 5.6
Use #array_search, array_column as var# search ID 8414 
Time:  0.00662 Seconds
Use #array_search# search ID 8414 
Time:  0.00459 Seconds
Use #foreach# search ID 8414 
Time:  0.00333 Seconds
Для больших массивов используйте foreach
foreach ($array as $key => $value) {
    if($value['id'] == 'needle){
        $result = $key;
        break;
    }
}

Комментарии ()

    Есть вопрос или предложение пиши в Telegram @cloudsv

    MTProto прokси для Telegram

    Прямой эфир

    cloudsv 01 октября 2019, 11:00
    Arch Linux Локальный редирект порта в Linux 0
    cloudsv 25 августа 2019, 19:14
    О жизни Социальная сеть от Яндекса Aura 0
    cloudsv 31 июля 2019, 00:34
    О жизни 33 year old 0
    cloudsv 25 июня 2019, 21:29
    Telegram Полезные боты в Telegram 0
    cloudsv 24 октября 2018, 00:27
    О жизни Обновление Scala Rider G4 11
    cloudsv 21 октября 2018, 23:16
    Arch Linux Памятка по основным утилитам Linux 0