Php 数组_筛选器和空()

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()等函数 从手册中: 注意:因为这是一种语言构造而不是函数,所以不能使用 对于解决方法

警告:数组_filter()要求参数2为有效回调, 未找到函数“empty”或函数名无效

为什么empty被认为是无效回调

$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
)

我认为存在一个更好的解决方案,我在阅读about
array\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" }