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

这不应该工作吗?

长话短说:我试图(太?)聪明并检查所有数组值是否不是空字符串。

4

5 回答 5

9

这是因为它empty是一种语言结构,而不是一种功能。从empty() 的手册中:

注意:因为这是一个语言结构而不是一个函数,所以不能使用变量函数来调用它

于 2010-04-08T19:56:46.053 回答
7

尝试array_filter不使用回调:

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

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

或者简单地将空包装到可调用对象中,如下所示:

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

或自 PHP 5.3 起

array_reduce($array, function($x) { return empty($x); });
于 2010-04-08T20:03:54.097 回答
2

为了增加其他功能,PHP 开发人员通常会创建这样的函数:

function isEmpty($var)
{
    return empty($var);
}
于 2010-04-08T20:05:51.223 回答
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;

}
于 2011-04-29T16:08:06.347 回答
0

Empty 不能用作回调,它需要对变量进行操作。从手册

注意:empty() 仅检查变量,因为其他任何内容都会导致解析错误。换句话说,以下内容将不起作用:empty(trim($name))。

于 2010-04-08T19:59:27.700 回答