php 多个数组,包含多个数组的数组上的PHP array_filter

我在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值