检查数组是否为空

我有下面的代码

<?php


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


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


?>

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

哪里不对?

566181 次浏览

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

$errors = array_filter($errors);


if (!empty($errors)) {
}

array_filter()函数的默认行为将从数组中删除所有等于null0''false的值。

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

如果0没有元素,尝试用sizeof检查它的大小。

从php文档:

如果var具有非空和非零值,则返回FALSE。

以下东西被认为是空的:

"" (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($error)仍然返回true,即使什么都没有设置。

这不是empty()的工作方式。根据手册,它只会在数组上返回true。其他的都说不通。

你也可以通过。

if(count($array) > 0)
{
echo 'Error';
}
else
{
echo 'No Error';
}

我不能复制(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 >

你到底在哪里做返回true的empty()调用?

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

PHP内置的空()函数检查变量是否为空、null、false或0的表示。它不会因为与数组项关联的值为false而返回true,在这种情况下,数组中有实际的元素,这就是所有的计算。

如果你想检查某个特定的错误条件是否在关联数组中被设置为真正的,你可以使用中的()函数来过滤值设置为true的键。

$set_errors = array_keys( $errors, true );

然后可以使用empty()函数检查该数组是否为空,同时告诉您是否有错误以及发生了哪些错误。

函数empty()不适用于测试空数组! 例子:< / p >

$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;
}

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

< p >再见 (抱歉我的英语不好)

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中,即使数组中的单个项或对象的属性为空,使用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