【问题标题】:What is the default value for callback argument of array_filter functionarray_filter 函数的回调参数的默认值是多少
【发布时间】:2020-11-22 23:21:47
【问题描述】:

array_filter 函数的callback 参数的默认值是多少?

假设我们有数组:

$input = [
    "Required field" => true
    "Please, enter a number" => false
];

通常情况下,我使用array_filter 而不显式设置callback 参数,如array_filter( $input),此函数将返回以下数组:

$input = [
    "Required field" => true
];

但现在我需要准确设置callback 参数。因此,当我发送 null 作为回调时,此函数返回 null 并且“非空”值(“必填字段”=> true)被忽略,我不喜欢什么。

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

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

但我希望有更优雅的方式

【问题讨论】:

  • 您能否提供在这种情况下您需要的输入和所需的输出,因为在没有回调的情况下仅调用 array_filter 对您来说是不够的?
  • 关于您的开场问题,在您自己链接的文档中进行了描述:If no callback is supplied, all empty entries of array will be removed. See empty() for how PHP defines empty in this case.
  • 我只想通过显式设置callback 参数从空值中过滤数组,但以更优雅的方式而不是设置自己的回调函数。
  • 最优雅的方式真的是设置回调。为什么要传递与默认值完全相同的回调?
  • 我想做array_filter_recursive函数。就像在这个例子中:stackoverflow.com/a/6795671/7265862。如您所见,在第二个函数中,有$callback 参数,稍后将传递给array_filter 函数。我不想使用 if else 语句来检查 null $callback 参数。这就是我向社区寻求优雅解决方案的原因

标签: php arrays


【解决方案1】:

如果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:使用 boolval 函数

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

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

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

使用函数 boolvar () 这显然也有效。但是,PHP manual 说:

var 标量值被转换为布尔值。

但 boolval 函数的示例也显示一个空数组作为值。

【讨论】:

  • 变体 2 是我正在寻找的。谢谢!
  • 关于remark的文章有链接吗?没找到
猜你喜欢
  • 2012-02-02
  • 1970-01-01
  • 2014-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
  • 2015-08-04
  • 1970-01-01
相关资源
最近更新 更多