PHP Значит ли if (count ($ array)) и if ($ array) одно и то же? - PullRequest
5 голосов
/ 16 февраля 2009

В PHP они всегда будут возвращать одинаковые значения?

//example 1

$array = array();

if ($array) {
   echo 'the array has items';

}

// example 2

$array = array();

if (count($array)) {
   echo 'the array has items';

}

Спасибо!

Ответы [ 4 ]

20 голосов
/ 16 февраля 2009

С http://www.php.net/manual/en/language.types.boolean.php, он говорит, что пустой массив считается ЛОЖНЫМ.


(Цитируется): При преобразовании в логическое значение следующие значения считаются ложными:

  • само логическое ЛОЖЬ
  • целое число 0 (ноль)
  • Поплавок 0,0 (ноль)
  • пустая строка и строка "0"
  • массив с нулевыми элементами
  • объект с нулевыми переменными-членами (только PHP 4)
  • специальный тип NULL (включая неустановленные переменные)
  • SimpleXML-объекты, созданные из пустых тегов

С

  • число ()> 0 НЕ ЛОЖЬ
  • заполненный массив НЕ ЛОЖЬ

тогда оба случая, показанные в вопросе, всегда будут работать как положено.

4 голосов
/ 16 февраля 2009

Они всегда будут возвращать одно и то же значение, но я нахожу

$array = array();

if (empty($array)) {
   echo 'the array is empty';
}

чтобы быть намного более читабельным.

1 голос
/ 16 февраля 2009

Обратите внимание, что второй пример (с использованием count()) значительно медленнее, по крайней мере, на 50% в моей системе (более 10000 итераций). count() фактически подсчитывает элементы массива. Я не уверен, но я представляю, что приведение массива к логическому типу работает очень похоже на empty() и останавливается, как только он находит хотя бы один элемент.

1 голос
/ 16 февраля 2009

Действительно, они будут. Преобразование массива в логическое значение даст вам значение true, если оно не пустое, а число массивов истинно с более чем одним элементом.

Смотри также: http://ca2.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...