Проверьте, нет ли массива пустым

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

<?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(), чтобы проверить, пуст ли этот массив, одновременно сообщая вам, есть ли ошибки и также какие ошибки произошли.

Ответ 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?