Проверка пустые массивы: количество по сравнению с пустым

Этот вопрос на, 'Как сказать, пуст ли массив PHP', имел меня думающий об этом вопросе

Есть ли причина это count должен использоваться вместо empty при определении, пуст ли массив или нет?

Моя персональная мысль была бы то, если эти 2 эквивалентны для случая пустых массивов, необходимо использовать empty потому что это дает булев ответ на булев вопрос. От вопроса, связанного выше, это кажется этим count($var) == 0 популярный метод. Мне, в то время как технически корректный, не имеет никакого смысла. Например, Q: $var, действительно ли Вы пусты? A: 7. Хм...

Есть ли причина, которую я должен использовать count == 0 вместо этого или просто вопрос персонального вкуса?

Как указано другими в комментариях для теперь удаленного ответа, count будет иметь влияние производительности для больших массивов, потому что это должно будет считать все элементы, тогда как empty может остановиться, как только это знает, что это не пусто. Так, если они дают те же результаты в этом случае, но count потенциально неэффективно, почему мы когда-либо использовали бы count($var) == 0?

95
задан Community 23 May 2017 в 12:26
поделиться

6 ответов

Обычно я использую пустую. Я не уверен, зачем на самом деле использовать счетчик - если массив большой, то счетчик занимает больше времени/больше накладных расходов. Если вам просто нужно знать, пустой массив или нет, то используйте empty.

93
ответ дан 24 November 2019 в 05:50
поделиться

Ребята, я переделал свой разум, спасибо.

Хорошо, нет никакой разницы между использованием пустого и счетчика . Технически, count следует использовать для массивов, а empty можно использовать как для массивов, так и для строк. Таким образом, в большинстве случаев они взаимозаменяемы, и если вы видите документацию php, вы увидите список предложений count , если вы находитесь на пусто , и наоборот.

0
ответ дан 24 November 2019 в 05:50
поделиться

Нет веских причин предпочитать count ($ myArray) == 0 перед пустым ($ myArray) . У них одинаковая семантика. Некоторые могут найти один более читабельным, чем другой. Один может работать немного лучше, чем другой, но вряд ли это будет значительным фактором в подавляющем большинстве приложений php. Для всех практических целей выбор - дело вкуса.

1
ответ дан 24 November 2019 в 05:50
поделиться

Думаю, это только личные предпочтения. Некоторые люди могут сказать empty быстрее (например, http://jamessocol.com/projects/count_vs_empty.php ), в то время как другие могут сказать count лучше, поскольку он изначально был разработан для массивов. empty является более общим и может применяться к другим типам.

php.net дает следующее предупреждение для count , хотя:

count () может возвращать 0 для переменной, которая не установлена, но также может возвращать 0 для переменной, которая была инициализируется пустым массивом. Используйте isset (), чтобы проверить, установлена ​​ли переменная.

Другими словами, если переменная не установлена, вы получите уведомление от PHP о том, что она не определена. Поэтому перед использованием count было бы предпочтительнее проверить переменную с помощью isset . Это не обязательно, если пусто .

15
ответ дан 24 November 2019 в 05:50
поделиться

Есть ли причина, по которой должен выполняться подсчет использоваться вместо пустого при определении, пуст массив или нет?

Бывает, когда вам нужно сделать что-то с непустым массивом, зная его размер:

if( 0 < ( $cnt = count($array) ) )
{
 echo "Your array size is: $cnt";
}
else
 echo "Too bad, your array is empty :(";

Но я бы не рекомендовал использовать count, если вы не на 100% уверены, что вы считаете массив. В последнее время я занимался отладкой кода, в котором функция ошибки возвращала FALSE вместо пустого массива, и я обнаружил:

var_dump(count(FALSE));

output:

int 1

Итак, с тех пор я использую empty или if (array () === $ array) , чтобы убедиться, что у меня есть array , который пуст.

10
ответ дан 24 November 2019 в 05:50
поделиться

Лично я предпочитаю элегантность кодирования (по отношению к моему конкретному варианту использования). Я согласен с Дэном МакГи, поскольку count () не отвечает с правильным типом данных (в данном случае логическим) для рассматриваемого теста, вынуждая разработчика писать больше кода для заполнения оператора if.

Оказывает ли это какое-либо существенное влияние на производительность, спорный вопрос только для очень больших массивов (для которых у вас, вероятно, в любом случае не будет достаточно выделенной памяти в большинстве установок).

В частности, когда дело доходит до PHP-массива $ _POST, на мой взгляд, гораздо более «логичным» кажется написать / увидеть:

if ( !empty ( $_POST ) ) {
    // deal with postdata
}
3
ответ дан 24 November 2019 в 05:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: