#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))
Комментариев нет:
Отправить комментарий