Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php array_filter函数回调参数的默认值是什么_Php_Arrays - Fatal编程技术网

Php array_filter函数回调参数的默认值是什么

Php array_filter函数回调参数的默认值是什么,php,arrays,Php,Arrays,函数的回调参数的默认值是什么 假设我们有一个数组: $input = [ "Required field" => true "Please, enter a number" => false ]; 通常,我使用array\u filter而不显式设置callback参数,作为array\u filter($input),此函数将返回以下数组: $input = [ "Required field"

函数的
回调
参数的默认值是什么

假设我们有一个数组:

$input = [
    "Required field" => true
    "Please, enter a number" => false
];
通常,我使用
array\u filter
而不显式设置
callback
参数,作为
array\u filter($input)
,此函数将返回以下数组:

$input = [
    "Required field" => true
];
但是现在我需要精确地设置
回调
参数。因此,当我将
null
作为回调发送时,此函数返回
null
,忽略“非空”值(“必填字段”=>true),我不喜欢什么

当然,我可以使用自己的回调函数调用该函数,如:

array_filter( $input, fn($item) => !empty($item) )

但我希望有更优雅的方式

如果array_filter的源代码包含第二个参数,则检查它是否是真正的可调用函数。也可以传递字符串。但即使这样,也会检查这是否是一个真正的函数

变量1:定义一个函数,然后使用它的名称

function isNotEmpty($val){
  return !empty($val);
}

$arr = [0,1,[],null,false,"a","",(object)[],-1];

$res = array_filter( $arr);
$res1 = array_filter( $arr, 'isNotEmpty');
    
var_dump($res === $res1); //bool(true)
变量2:使用该函数

对于boolvar()函数,这显然也起作用。然而,报告说:

var正在转换为布尔值的标量值


但是布尔函数的示例也显示了一个空数组作为一个值。

在这种情况下,仅调用
array\u filter
而不回调是不够的,您能否提供所需的输入和所需的输出,在您自己链接的文档中有描述:
如果没有提供回调,数组的所有空条目都将被删除。请参阅empty(),了解PHP在本例中如何定义empty。
我只想通过显式设置
callback
参数从空值中筛选数组,但要采用更优雅的方式,而不是设置自己的回调函数。最优雅的方式实际上不是设置回调。为什么要传递一个与默认值完全相同的回调?我想使
array\u filter\u递归
函数。如本例所示:。如您所见,在第二个函数中,有一个
$callback
参数,稍后将传递给
array\u filter
函数。我不想使用if-else语句来检查null
$callback
参数。这就是为什么我要求社区提供优雅的解决方案变体2正是我所寻找的。非常感谢。有关于评论的文章的链接吗?我找不到
$arr = [0,1,[],null,false,"a","",(object)[],-1];

$res = array_filter( $arr);
$res1 = array_filter( $arr, 'boolval');

var_dump($res === $res1);  //bool(true)