我有超过1k这种格式的数组。
[0] => stdClass Object (
[order_date] => 2017-11-23
[status] => Shipped
[destination] => "Chicago"
[car_make] => YYY
[customer] => "Vic" )
[1] => stdClass Object (
[order_date] => 2017-11-24
[status] => Received
[destination] => "New York"
[car_make] => ZZZ
[customer] => "Admin" )
[2] => stdClass Object (
[order_date] => 2017-11-23
[status] => Shipped
[destination] => "Detroit"
[car_make] => XXX
[customer] => "Vic" )
[3] => stdClass Object (
[order_date] => 2017-11-13
[status] => Complete
[destination] => "LA"
[car_make] => WWW
[customer] => "John" )
我想使用多个键过滤整个数据。 我在一个闭包中使用了array_filter,它只根据一个键完成了过滤数据。
function cc_filter_car_data( $data )
{
return function( $key,$value ) use( $data )
{
return array_filter( $data, function( $data_1 ) use( $key,$value )
{
return $data_1->$key === $value;
});
};
}
以上cc_filter_car_data()
示例我可以返回customer = Vic
所有数组(仅过滤一个键)。
但我想返回所有数组where status=shipped
或customer = Vic
或car_make = ZZZ
。 (多个和不同的键)
我的问题:
我怎么解决这个问题?任何帮助赞赏。
其他
总的来说,每个数组都有13 keys
可以过滤。
我们的想法是:用户可以将第一个过滤器发送为car_make
,然后根据car_model
过滤返回的数据,依此类推
查看一个好的jquery示例here 我在做服务器端处理
答案 0 :(得分:0)
创建一个包含要匹配的k => v对的数组,并使用嵌套的foreach循环
$search = array();
$search['status'] = 'shipped';
$search['customer'] = 'Vic';
$search['car_make'] = 'ZZZ';
$returnArray = array();
foreach ($data as $d) {
foreach ($search as $k=>$v) {
if ($d->$k === $v) {
$returnArray[] = $d;
break;
}
}
}
print_r($returnArray);