PHP数组过滤

时间:2017-11-20 20:19:34

标签: javascript php arrays wordpress closures

我有超过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=shippedcustomer = Viccar_make = ZZZ。 (多个和不同的键) 我的问题: 我怎么解决这个问题?任何帮助赞赏。 其他 总的来说,每个数组都有13 keys可以过滤。 我们的想法是:用户可以将第一个过滤器发送为car_make,然后根据car_model过滤返回的数据,依此类推

查看一个好的jquery示例here 我在做服务器端处理

1 个答案:

答案 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);