empty()不是有效的回调?

use*_*841 3 php callback array-map

我想在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";

}
Run Code Online (Sandbox Code Playgroud)
$ 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
Run Code Online (Sandbox Code Playgroud)

这不应该工作吗?

长话:我正试图(太?)聪明并检查所有数组值都不是空字符串.

Pek*_*ica 9

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

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


Gor*_*don 7

尝试array_filter没有回调:

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

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

或者简单地将空包装成可调用的,如下所示:

array_reduce($array, create_function('$x', 'return empty($x);'));
Run Code Online (Sandbox Code Playgroud)

或者从PHP 5.3开始

array_reduce($array, function($x) { return empty($x); });
Run Code Online (Sandbox Code Playgroud)