Php 数组_筛选器和空()
警告:数组_filter()要求参数2为有效回调, 未找到函数“empty”或函数名无效 为什么empty被认为是无效回调Php 数组_筛选器和空(),php,array-filter,Php,Array Filter,警告:数组_filter()要求参数2为有效回调, 未找到函数“empty”或函数名无效 为什么empty被认为是无效回调 $arr = array_filter($arr, 'empty'); 这是可行的:if(空($arr['foo'])die()是一种语言构造,在PHP中不是真正的函数,因此不能将其名称作为参数传递给array\u filter()和call\u user\u func\u array()等函数 从手册中: 注意:因为这是一种语言构造而不是函数,所以不能使用 对于解决方法
$arr = array_filter($arr, 'empty');
这是可行的:if(空($arr['foo'])die()
是一种语言构造,在PHP中不是真正的函数,因此不能将其名称作为参数传递给array\u filter()
和call\u user\u func\u array()等函数
从手册中:
注意:因为这是一种语言构造而不是函数,所以不能使用
对于解决方法,只需将其包装在另一个用户定义的函数中;请参阅。答案
不是函数而是语言构造,并且数组_filter()
只能接受函数作为其回调
手册页面上有一个小注释:
注意:因为这是一种语言结构而不是函数,所以
无法使用调用
变通
要解决此问题,您可以在另一个函数中换行为空,例如:
function empty_test($val) {
return empty($val);
}
然后这样称呼它:
$arr = array_filter($arr, 'empty_test');
见:
注意:因为这是一种语言构造而不是函数,所以不能使用变量函数调用它
所以基本上empty()
不是一个函数,因为回调必须是一个函数,empty()
不能作为回调传递
但是您可以创建可能使用empty()
的回调函数。以下内容应在PHP>5.3中使用:
$arr = array_filter($arr, function($var){
return empty($var);
});
在PHP<5.3中,您需要先创建类似的函数,然后将其传递给数组过滤器()
有帮助吗?您可以只使用array\u filter()函数,而无需回调:
结果:
Array
(
[0] => PHP
[1] => HTML
[2] => CSS
[4] => JavaScript
)
我认为存在一个更好的解决方案,我在阅读aboutarray\u filter
见此评论:
+1用于解决方法。这里有一些更具创意(但我认为更昂贵):$arr=array\u diff($arr,array\u filter($arr))代码>不错。在这里,弄清楚什么样的行为在起作用,对大脑来说也有点费力!如果过滤掉空值,只需添加!empty($var),因为本例筛选出非空值,返回一个空值数组。
Array
(
[0] => PHP
[1] => HTML
[2] => CSS
[4] => JavaScript
)
<?php
// removes all NULL, FALSE and Empty Strings but leaves 0 (zero) values
$result = array_filter( $array, 'strlen' );
?>
$array = array('apple', '', 'watermelon');
var_dump(array_filter($array));
----
Output :
array(2) { [0]=> string(5) "apple" [2]=> string(10) "watermelon" }