1

我的数组看起来像这样

Array ( [] => ) 

对我来说它是空的,我正在寻找一种方法来检查它。

第一个想法:

if( empty($array) ){
    echo 'Array is empty!';
}

对于空函数,我的数组不为空。一个“真正的”空数组如下所示:Array()。

第二个想法:

if( $array[''] == '' ){
    echo 'Array is empty!';
}

这对于我的空数组是正确的,但是对于不包含这样一个空键值对的任何其他数组都会引发错误。

有任何想法吗?

我的数组的var_dump:

array(1) { [""]=> NULL } 
4

3 回答 3

6

为您快速解决方法:

$array = array_filter($array);

if (empty($array)) {
   echo 'Array is empty!';
}

array_filter()函数的默认行为将删除数组中所有等于null, 0,''false

编辑1:

如果你想保留0你必须使用回调函数。它将遍历数组中的每个值,将它们传递给回调函数。如果回调函数返回 true,则将数组中的当前值返回到结果数组中。

function customElements($callback){
  return ($callback !== NULL && $callback !== FALSE && $callback !== '');
}
$array = array_filter($array, "customElements");
var_dump($array);

用法:

$array = array_filter($array, "customElements");

if (empty($array)) {
   echo 'Array is empty!';
}

它现在会保留0,就像你问的那样。

编辑2:

正如Amal Murali提供的那样,您也可以避免在回调中使用函数名并直接声明它:

$array = array_filter($array, function($callback) { 
   return ($callback !== NULL && $callback !== FALSE && $callback !== ''); 
});
于 2013-10-31T18:28:22.847 回答
1

我不知道您为什么要拥有该数组或生成它的问题代码,但是:

if(empty(array_filter($array))) {
    echo 'Array is empty!';
}

明显检查:

if(empty($array) || (count($array) == 1 && isset($array['']) && empty($array['']))) {
    echo 'Array is empty!';
}
于 2013-10-31T18:34:03.903 回答
1

看看这些电话:

 $a = Array(null => null);
 $x = (implode("", array_keys($a)));
 $y = (implode("", array_values($a)));

你可以用它们来控制数据“空”(keys, vals or both)

编辑:这将返回为空:

$a = Array(null => false);

也是,我想这对你来说是个问题

于 2013-10-31T18:44:45.230 回答