Страницы

Поиск по вопросам

четверг, 28 ноября 2019 г.

Как лучше всего проверить массив на пустоту в PHP?

#php #массивы


Какой из вариантов наиболее корректный, для проверки php массива на отсутствие в
нём элементов?

if ($arr) {...}
if (empty($arr)) {...}
if (isset($arr[0])) {...}
if (count($arr)) {...}
    


Ответы

Ответ 1



Да все, в общем, корректны. Только в первом и четвертом случаях будет преобразование типа к bool, а третий подойдет только для индексных массивов. Есть еще вариант sizeof($arr).

Ответ 2



Возможно, наилучший вариант if ($arr === Array()) {...}

Ответ 3



ОТВЕТ: Проверять пуст массив через функции count и sizeof - не стоит, так как он тратить время на обработку. мизерное время, но тратит. Лучшие варианты это: 1. if($arr) {...} // Проверит на наличие элементов внутри 2. if(empty( $arr )) {...} // Проверит на наличие элементов внутри 3. if(array_shift( $arr )) {...} // Проверит наличие первого элемента 4. if($arr[0]) {...} // Проверит на наличие нулевого элемента, для индексного массива, который начинается с 0 ИССЛЕДОВАНИЯ: Данные ответ проверен через микротест со сложным массивом, с 40014 элементов и PHP 7.1 Исполнение скрипта происходило на локальной машине (Open Server 5.2). Замер происходил через функцию php microtime() Результат проверялся трижды РЕЗУЛЬТАТЫ ИССЛЕДОВАНИЙ: Первый запуск if(count($arr)) {...} : 0.0010001659393311 сек. if(sizeof($arr)) {...} : 0 сек. if($array) {...} : 0 сек. if(empty($arr)) {...} : 0 сек. if(array_shift($arr)) {...} : 0 сек. if($arr[0]) {...} : 0 сек. Второй запуск if(count($arr)) {...} : 0 сек. if(sizeof($arr)) {...} : 0.0010011196136475 сек. if($array) {...} : 0 сек. if(empty($arr)) {...} : 0 сек. if(array_shift($arr)) {...} : 0 сек. if($arr[0]) {...} : 0 сек. Третий запуск if(count($arr)) {...} : 0.00099992752075195 сек. if(sizeof($arr)) {...} : 0 сек. if($array) {...} : 0 сек. if(empty($arr)) {...} : 0 сек. if(array_shift($arr)) {...} : 0 сек. if($arr[0]) {...} : 0 сек. ЧТО Я ЮЗАЮ: Для себя использую if($arr) {...} и if($arr[0]) {...}, так как нет необходимости вызывать дополнительные функции - обертки

Ответ 4



if($array === []){ ... } Более оптимальный так как: Код более читаемый - "Если переменная равна пустому массиву"; Сразу идет контроль типов, и вы действительно сравниваете массив; Не используются функции, а только сравнение, значит этот код будет работать немного быстрее;

Ответ 5



Я использую if((bool) array_filter($array))

Комментариев нет:

Отправить комментарий