Проверьте, нет ли массива пустым
У меня есть следующий код
<?php
$error = array();
$error['something'] = false;
$error['somethingelse'] = false;
if (!empty($error))
{
echo 'Error';
}
else
{
echo 'No errors';
}
?>
Однако empty($error)
все еще возвращает true
, хотя ничего не задано.
Что не так?
Ответы
Ответ 1
В массиве есть два элемента, и это определенно не означает, что массив пуст. В качестве быстрого обходного пути вы можете сделать следующее:
$errors = array_filter($errors);
if (!empty($errors)) {
}
array_filter()
Функция по умолчанию по умолчанию удалит все значения из массива, которые равны null
, 0
, ''
или false
.
В противном случае в вашем конкретном случае конструкция empty()
всегда будет возвращать true
, если есть хотя бы один элемент даже с "пустым" значением.
Ответ 2
Вы также можете проверить это, выполнив.
if(count($array) > 0)
{
echo 'Error';
}
else
{
echo 'No Error';
}
Ответ 3
Попробуйте проверить размер с помощью sizeof
, если 0
нет элементов.
Ответ 4
PHP встроенная функция empty() проверяет, пуста ли переменная, нуль, ложь или представление нуля. Он не возвращает true только потому, что значение, связанное с записью массива, является ложным, в этом случае массив имеет в нем фактические элементы и все, что оценивалось.
Если вы хотите проверить, установлено ли конкретное условие ошибки true в ассоциативном массиве, вы можете использовать array_keys() для фильтрации ключей, для которых установлено значение true.
$set_errors = array_keys( $errors, true );
Затем вы можете использовать функцию empty(), чтобы проверить, пуст ли этот массив, одновременно сообщая вам, есть ли ошибки и также какие ошибки произошли.
Ответ 5
массив с нулевыми элементами преобразуется в false
http://php.net/manual/en/language.types.boolean.php
Ответ 6
Однако пустая ($ error) по-прежнему возвращает true, даже если ничего не установлено.
Это не работает empty()
. Согласно manual, он вернет true только в пустой массив. Все остальное не имеет смысла.
Ответ 7
Из 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)
Ответ 8
Функция 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;
}
ok, это очень старый вопрос:), но я нашел этот поток для поиска решения, и я не нашел хорошего.
до свидания
(извините за мой английский)
Ответ 9
<?php
if(empty($myarray))
echo"true";
else
echo "false";
?>
Ответ 10
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";
?>
Ответ 11
В 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 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
Ответ 12
Я не могу воспроизвести это (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?