检查数组是否为空

时间:2011-11-30 16:03:01

标签: php arrays

我有以下代码

<?php

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

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

?>

但是,empty($error)仍会返回true,即使没有设置任何内容。

什么不对?

11 个答案:

答案 0 :(得分:408)

数组中有两个元素,这绝不意味着数组为空。作为一种快速解决方法,您可以执行以下操作:

$errors = array_filter($errors);

if (!empty($errors)) {
}

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

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

答案 1 :(得分:68)

你也可以通过这样做来检查。

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

答案 2 :(得分:15)

如果sizeof没有元素,请尝试使用0检查其大小。

答案 3 :(得分:15)

PHP的内置empty()函数检查变量是否为空,null,false或表示为零。它只是因为与数组条目相关联的值为false而不返回true,在这种情况下,数组中包含实际元素,并且所有元素都被评估。

如果您想检查关联数组中是否将特定错误条件设置为 true ,则可以使用array_keys()函数过滤具有其值集的键为真。

$set_errors = array_keys( $errors, true );

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

答案 4 :(得分:6)

具有零元素的数组转换为false

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

答案 5 :(得分:4)

  

但是,即使没有设置任何内容,空($ error)仍会返回true。

这不是empty()的工作方式。根据{{​​3}},它仅在 empty 数组中返回true。其他任何事情都没有意义。

答案 6 :(得分:2)

从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)

答案 7 :(得分:2)

函数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;
}
好吧,这是一个非常古老的问题:),但我发现这个线程正在寻找一个解决方案而且我找不到一个好的。

再见 (对不起我的英文)

答案 8 :(得分:2)

hi array是一个对象,因此它为null类型或空白

   <?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";
   ?>

答案 9 :(得分:1)

我无法复制(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()调用的确切位置?

答案 10 :(得分:1)

在PHP中,即使数组中的单个项或对象的属性为空,也不会使用empty($subject)函数将数组或对象评估为空。换句话说,将一堆数据拼凑在一起,这些数据单独测试为&#34;空&#34;创建一个非空的复合。 使用以下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