У меня есть следующий код
<?php $error = array(); $error['something'] = false; $error['somethingelse'] = false; if (!empty($error)) { echo 'Error'; } else { echo 'No errors'; } ?>
Однако empty($error)
прежнему возвращает true
, хотя ничего не задано.
Что не так?
В массиве есть два элемента, и это определенно не означает, что массив пуст. В качестве быстрого обходного пути вы можете сделать следующее:
$errors = array_filter($errors); if (!empty($errors)) { }
Функция по умолчанию функции array_filter()
удалит все значения из массива, которые равны null
, 0
, ''
или false
.
В противном случае в вашем конкретном случае конструкция empty()
всегда будет возвращать true
если есть хотя бы один элемент даже с «пустым» значением.
Вы также можете проверить это, выполнив.
if(count($array) > 0) { echo 'Error'; } else { echo 'No Error'; }
Попробуйте проверить его размер с sizeof
если 0
нет элементов.
Встроенная функция пустого () PHP проверяет, пуста ли переменная, нуль, ложь или представление нуля. Он не возвращает true только потому, что значение, связанное с записью массива, является ложным, в этом случае массив имеет в нем фактические элементы, и это все, что было оценено.
Если вы хотите проверить, установлено ли конкретное условие ошибки true в ассоциативном массиве, вы можете использовать функцию array_keys () для фильтрации ключей, для которых установлено значение true.
$set_errors = array_keys( $errors, true );
Затем вы можете использовать функцию empty (), чтобы проверить, пуст ли этот массив, одновременно сообщая вам, есть ли ошибки, а также какие ошибки произошли.
массив с нулевыми элементами преобразуется в false
Однако пустой ($ error) по-прежнему возвращает true, хотя ничего не задано.
Это не работает empty()
. Согласно руководству , он вернет true только в пустой массив. Ничего другого не имеет смысла.
Из PHP-документации:
Возвращает FALSE, если var имеет непустое и ненулевое значение.
Следующие вещи считаются пустыми:
"" (an empty string) 0 (0 as an integer) 0.0 (0 as a float) "0" (0 as a string) NULL FALSE array() (an empty array) var $var; (a variable declared, but without a value in a class)
Функция empty()
не работает для тестирования пустых массивов! пример:
$a=array("",""); if(empty($a)) echo "empty"; else echo "not empty"; //this case is true
необходима функция:
function is_array_empty($a){ foreach($a as $elm) if(!empty($elm)) return false; return true; }
хорошо, это очень старый вопрос :), но я нашел этот поток, ищущий решение, и я не нашел хорошего.
bye (извините за мой английский)
<?php if(empty($myarray)) echo"true"; else echo "false"; ?>
В PHP, даже если отдельные элементы в массиве или свойствах объекта пусты, массив или объект не будут оцениваться пустым, используя empty($subject)
функцию. Другими словами, объединяя кучу данных, которые индивидуально тестируются как «пустые», создается составной, который не является пустым. Используйте следующую функцию PHP, чтобы определить, являются ли элементы в массиве или свойствах объекта пустыми:
function functionallyEmpty($o) { if (empty($o)) return true; else if (is_numeric($o)) return false; else if (is_string($o)) return !strlen(trim($o)); else if (is_object($o)) return functionallyEmpty((array)$o); // If it's an array! foreach($o as $element) if (functionallyEmpty($element)) continue; else return false; // all good. return true; }
Пример использования:
$subject = array('', '', ''); empty($subject); // returns false functionallyEmpty($subject); // returns true class $Subject { a => '', b => array() } $theSubject = new Subject(); empty($theSubject); // returns false functionallyEmpty($theSubject); // returns true
hi массив – это один объект, поэтому он имеет нулевой тип или пустой
<?php if($error!=null) echo "array is blank or null or not array"; //OR if(!empty($error)) echo "array is blank or null or not array"; //OR if(is_array($error)) echo "array is blank or null or not array"; ?>
Я не могу воспроизвести это (php 5.3.6):
php > $error = array(); php > $error['something'] = false; php > $error['somethingelse'] = false; php > var_dump(empty($error)); bool(false) php > $error = array(); php > var_dump(empty($error)); bool(true) php >
где вы делаете empty()
вызов, который возвращает true?