Array_filter和empty()

Ale*_*lex 3 php array-filter

警告:array_filter()期望参数2是有效的回调,找不到函数'empty'或函数名称无效....

为什么空被认为是无效的回调?

$arr = array_filter($arr, 'empty');
Run Code Online (Sandbox Code Playgroud)

这有效: if(empty($arr['foo'])) die();

Tre*_*non 8

回答

empty()它不是一个函数,而是一个语言结构,array_filter()只能接受一个函数作为它的回调.

这是手册页上的一个小注释:

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

解决

要解决此问题,您可以将空包装在另一个函数中,例如:

function empty_test($val) {
    return empty($val);
}
Run Code Online (Sandbox Code Playgroud)

然后像这样调用它:

$arr = array_filter($arr, 'empty_test');
Run Code Online (Sandbox Code Playgroud)


Bol*_*ock 6

empty()是一种语言构造,而不是PHP的真正功能,因此您不能将其名称作为参数传递给像array_filter()和这样的函数call_user_func_array().

从手册:

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

要获得解决方法,只需将其包装在另一个用户定义的函数中; 看到Treffynnon的回答.


Tad*_*eck 6

请参阅以下文档页面empty():

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

所以基本上empty()不是函数,因为回调必须是函数,empty()不能作为回调传递.

但是您可以创建可能使用的回调empty().以下应该在PHP> 5.3中工作:

$arr = array_filter($arr, function($var){
    return empty($var);
});
Run Code Online (Sandbox Code Playgroud)

在PHP <5.3中,您需要先创建类似的函数,然后将其传递给array_filter().

它有帮助吗?