Убедитесь, что массив пуст

У меня есть следующий код

<?php $error = array(); $error['something'] = false; $error['somethingelse'] = false; if (!empty($error)) { echo 'Error'; } else { echo 'No errors'; } ?> 

Однако empty($error) прежнему возвращает true , хотя ничего не задано.

Что не так?

Related of "Убедитесь, что массив пуст"

В массиве есть два элемента, и это определенно не означает, что массив пуст. В качестве быстрого обходного пути вы можете сделать следующее:

 $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

http://php.net/manual/en/language.types.boolean.php

Однако пустой ($ 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?