【发布时间】:2011-12-06 12:22:27
【问题描述】:
警告:array_filter() 期望参数 2 是有效的回调, 未找到函数“空”或函数名无效......
为什么空被认为是无效的回调?
$arr = array_filter($arr, 'empty');
这可行:if(empty($arr['foo'])) die();
【问题讨论】:
标签: php array-filter
警告:array_filter() 期望参数 2 是有效的回调, 未找到函数“空”或函数名无效......
为什么空被认为是无效的回调?
$arr = array_filter($arr, 'empty');
这可行:if(empty($arr['foo'])) die();
【问题讨论】:
标签: php array-filter
empty() 不是一个函数,而是一个语言结构,array_filter() 只能接受一个函数作为其回调。
这在手册页上作为一个小注释给出:
注意:因为这是一个语言结构而不是一个函数,它 无法使用variable functions调用
要解决这个问题,您可以将空包装在另一个函数中,例如:
function empty_test($val) {
return empty($val);
}
然后这样称呼它:
$arr = array_filter($arr, 'empty_test');
【讨论】:
$arr = array_diff($arr, array_filter($arr));
见the documentation page on empty():
注意:因为这是一种语言结构而不是函数,所以不能使用变量函数调用它
所以基本上empty()不是函数,而且因为回调必须是函数,所以empty()不能作为回调传递 >.
但是您可以创建可能使用empty() 的回调。以下应该在 PHP > 5.3 中工作:
$arr = array_filter($arr, function($var){
return empty($var);
});
在 PHP array_filter()。
有帮助吗?
【讨论】:
empty() 是一种语言结构,而不是真正的 PHP 函数,因此您不能将其名称作为参数传递给 array_filter() 和 call_user_func_array() 等函数。
来自手册:
注意:因为这是一个语言结构而不是一个函数,所以不能使用variable functions调用它
对于一个解决方法,只需将其包装在另一个用户定义的函数中;见Treffynnon's answer。
【讨论】:
您可以只使用 array_filter() 函数而不使用回调:
Remove empty array elements in PHP
$arr = array("PHP", "HTML", "CSS", "", "JavaScript", null, 0);
print_r(array_filter($arr)); // removing blank, null, false, 0 (zero) values
结果:
Array
(
[0] => PHP
[1] => HTML
[2] => CSS
[4] => JavaScript
)
【讨论】:
我认为存在更好的解决方案,我发现它阅读了doc 关于array_filter
查看此评论:https://www.php.net/manual/fr/function.array-filter.php#111091
<?php
// removes all NULL, FALSE and Empty Strings but leaves 0 (zero) values
$result = array_filter( $array, 'strlen' );
?>
我只允许自己发布它,因为我认为这是一个非常优雅的解决方案。
另外,由于array_filter 本身已经将null 或false 值过滤为默认回调,因此此代码也可以工作:
$array = array('apple', '', 'watermelon');
var_dump(array_filter($array));
----
Output :
array(2) { [0]=> string(5) "apple" [2]=> string(10) "watermelon" }
【讨论】: