包含多个数组的数组上的PHP数组\过滤器
在PHP中,当名为包含多个数组的数组上的PHP数组\过滤器,php,arrays,array-filter,Php,Arrays,Array Filter,在PHP中,当名为type的键的值与特定字符串匹配时,我将使用它拆分包含多个数组的数组。下面是它的样子: 样本数组 $arr[] = Array ( [0] => Array ( [type] => Recurring ... ) [1] => Array ( [type] => Single ... ) ) 功能 function recurring($value) { return ($value['type'] == 'Recurring'
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 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);
一种方法如下,但我不喜欢它诚实
$array = [['type' => 'Single'], ['type' => 'Recurring']];
function key_type($value) {
global $string;
return $value['type'] == $string;
}
($string = 'Recurring') && ($recurring = array_filter($array, 'key_type'));
($string = 'Single') && ($single = array_filter($array, 'key_type'));
实现相同功能的另一种方法是使用匿名函数(闭包)。不要想太多干燥的东西看起来很好:
$array = [['type' => 'Single'], ['type' => 'Recurring']];
$recurring = array_filter($array, function($value) {
return $value['type'] == 'Recurring';
});
$single = array_filter($array, function($value) {
return $value['type'] == 'Single';
});
你可以按照你在问题中的建议去做。您只需要让
key\u type()
函数返回一个可调用的函数,这是array\u filter
所期望的第二个参数。您可以返回一个匿名函数,并使用注释中提到的use
关键字asCBroe
将参数传递到匿名函数中
以下是一个例子:
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\u type
函数中更改一次即可 使用闭包(匿名函数)有什么问题?array\u filter($arr,key\u type('recurtive'),…
——当然,这不起作用,因为key\u type('recurtive'))
是一个函数调用,而不仅仅是对一个函数的引用。//在这种情况下,use
关键字很有用,@CBroe如果该函数本身返回一个匿名函数,那么它可能会起作用。然后,您可以按照您对返回的匿名函数的建议使用use
关键字。我将发布一个答案。