empty()不是一个有效的回调函数?

3

我正在尝试在PHP中使用empty()函数进行数组映射。但是我收到了错误提示,显示它不是有效的回调函数。

$ cat test.php
<?

$arrays = array(
   'arrEmpty' => array(
        '','',''
    ),
);

foreach ( $arrays as $key => $array ) {

        echo $key . "\n";
        echo array_reduce( $array, "empty" );
        var_dump( array_map("empty", $array) );
        echo "\n\n";

}

$ php test.php
arrEmpty

Warning: array_reduce(): The second argument, 'empty', should be a valid callback in /var/www/authentication_class/test.php on line 12

Warning: array_map(): The first argument, 'empty', should be either NULL or a valid callback in /var/www/authentication_class/test.php on line 13
NULL

这个应该可以工作吧?
长话短说:我试图变得(太)聪明,检查所有数组值不是空字符串。
5个回答

9

这是因为empty是一种语言结构而不是函数。根据 empty()手册:

注意:由于这是一种语言结构而不是函数,因此不能使用变量函数进行调用


你知道我喜欢这个网站的什么吗?那就是人们不会说“RTFM!” :D - user151841
@user151841,我们是不被允许这样做的。那是唯一的原因 ;) - Gordon

7
尝试使用没有回调函数的array_filter

如果没有提供回调函数,则会删除所有等于FALSE(请参阅转换为布尔值)的输入条目。

然后,您可以使用count(array_filter($array))来查看它是否仍具有值。

或者,只需将empty包装成可调用的形式,如下所示:

array_reduce($array, create_function('$x', 'return empty($x);'));

或者从PHP 5.3开始

array_reduce($array, function($x) { return empty($x); });

2

除了其他人提到的内容,PHP开发人员通常会创建这样一个函数:

function isEmpty($var)
{
    return empty($var);
}

0

我不知道为什么,在回调函数中使用empty()对我有效。

最初出现此错误的原因是因为我试图将回调函数作为独立函数进行调用,而实际上它在我的类内部,我必须使用array(&$this ,'func_name')进行调用。

请参见下面的代码。这对我有效。如果有影响的话,我使用的是php 5.2.8...

$table_values = array_filter( $table_values, array(&$this, 'remove_blank_rows') );

function remove_blank_rows($row){


        $not_blank = false;

        foreach($row as $col){
            $cell_value = trim($col);
            if(!empty( $cell_value )) {
                $not_blank = true;
                break;
            }
        }

        return $not_blank;

}

0

空值不能用作回调函数,它需要在变量上进行操作。来自手册

注意:empty()仅检查变量,否则会导致解析错误。换句话说,以下内容将无法正常工作:empty(trim($name))。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接