Считается ли массив логическим истиной в php? - PullRequest
5 голосов
/ 23 марта 2012

У меня тут быстрый вопрос. Я знаю, что функция cakePHP find ('first') возвращает массив, содержащий первый результат, если он найден, в противном случае - false. Мой вопрос заключается в следующем: что если бы я написал чек следующим образом:

if(result_is_array) // that means I have data
{
    // do something
}
else // that means result is a boolean
{
    // do something else
}

Вместо проверки, является ли результат, полученный из find('first'), массивом или нет, я могу просто сказать:

$result = $this->MyModel->find('first');
if($result)
{
    // do something
}

Другими словами, если я получу массив здесь, будет ли он равен TRUE в php? if(array()) равно true в php?

Ответы [ 6 ]

8 голосов
/ 23 марта 2012

ДА, вы можете сделать

$result = $this->MyModel->find('first');
if($result)

Массив с length > 0 возвращает true

Объяснение здесь в документах

При преобразовании в логическое значение следующие значения считаются ЛОЖНЫМИ

  • массив с нулевыми элементами

Любое другое значение считается ИСТИННЫМ

2 голосов
/ 23 марта 2012

Вместо проверки, является ли результат, полученный из find ('first'), массивом или нет

Да.Сделайте это вторым способом: if ($result).Если find возвращает пустой массив или логическое значение false, ветвь не будет выполнена.

Лучшее в этом - то, что дает читателю понять, чтопроверка непустого значения .

1 голос
/ 23 марта 2012

Согласно документации , если вы попытаетесь трактовать массив как логическое значение, массив будет считаться истинным именно тогда, когда он не пустой.

1 голос
/ 23 марта 2012

Массив нулевого значения: false

Массив со значениями в нем true

Вы можете просмотреть эту таблицу , чтобы увидеть, как оценивается true против false.

0 голосов
/ 23 марта 2012

Используйте следующее, если вы ищете значение TRUE:

if ( $result !== false )
{
    // do something
}
0 голосов
/ 23 марта 2012

Пустой массив всегда будет иметь значение false или, если он содержит какие-либо ключи / значения, он будет иметь значение true.если $this->MyModel->find('first'); всегда возвращает массив, тогда пустой результат будет иметь значение false и true в противном случае.так что ваш код совершенно действителен.

...