我在PHP中使用array_filter来在名为type的键的值与特定字符串匹配时拆分包含多个数组的数组.看起来是这样的:
样品阵列
$arr[] = Array (
[0] => Array ( [type] => Recurring ... )
[1] => Array ( [type] => Single ... )
)
职能
function recurring($value)
{
return ($value['type'] == 'Recurring');
}
function single($value)
{
return ($value['type'] == 'Single');
}
分割阵列
$recurring = array_filter($arr, 'recurring');
$single = array_filter($arr, 'single');
这行得通,但是我很好奇是否有一种方法可以简化它,以便将来我可以创建其他过滤后的数组而不必为每个数组创建新函数.
我已经开始使用闭包设置单个函数,但是我不确定该怎么做.有任何想法吗?
function key_type($value, $key, $string) {
return $key == 'type' && $value == $string;
}
$recurring = array_filter($arr,
key_type('Recurring'), ARRAY_FILTER_USE_BOTH);
$single = array_filter($pricing,
key_type('Single'), ARRAY_FILTER_USE_BOTH);
解决方法:
您实际上可以完成您在问题中提出的建议.您只需要让key_type()函数返回一个可调用函数,这就是array_filter期望的第二个参数.您可以返回一个匿名函数,并使用注释中提到的use关键字CBroe将参数传递给匿名函数.
这是一个例子:
function key_type($key) {
return function($value) use ($key) {
return $value['type'] == $key;
};
}
$arr = array(
array('type'=>'Recurring'),
array('type'=>'Single')
);
print_r(array_filter($arr, key_type('Single'), ARRAY_FILTER_USE_BOTH));
上面的代码将输出:
Array ( [1] => Array ( [type] => Single ) )
这种方法的优点在于,如果您需要更改所有需要使用过滤器的实例的逻辑,则只需在key_type函数中将其更改一次即可.
标签:array-filter,arrays,php
来源: https://codeday.me/bug/20191025/1928665.html