我有下面的代码

<?php

$error = array();
$error['something'] = false;
$error['somethingelse'] = false;

if (!empty($error))
{
    echo 'Error';
}
else
{
    echo 'No errors';
}

?>

然而,empty($error)仍然返回true,即使什么都没有设置。

哪里不对?


当前回答

在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

其他回答

数组中有两个元素,这并不意味着数组是空的。作为一个快速的解决方案,你可以做以下:

$errors = array_filter($errors);

if (!empty($errors)) {
}

Array_filter()函数的默认行为将从数组中删除所有等于null、0或false的值。

否则,在您的特定情况下,如果至少有一个元素具有“empty”值,empty()构造将始终返回true。

<?php
if(empty($myarray))
echo"true";
else
echo "false";
?>

零元素数组转换为false

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

在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

函数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;
}

好吧,这是一个非常老的问题:),但我发现这个帖子在寻找一个解决方案,我没有找到一个好的。

再见 (英语不好意思)