2016-05-29 57 views
0

我具有低于阵列,过滤multidimenstion阵列条件逻辑

Array ([0] => Array ([location] => X33 [usernumber] => 1 [order] => XX [part_number] => Hi) [1] => Array ([location] => X33 [usernumber] => 1 [order] => XX [part_number] => 68730) [2] => Array ([location] => W33 [usernumber] => 2 [order] => YY [part_number] => 68741) [3] => Array ([location] => W33 [usernumber] => 2 [order] => YY [part_number] => Hello) 

我要过滤此阵列usernumber = 1,由此它会创建1个阵列与具有usernumber = 1阵列,同样它会创建用于usernumber = 2

我在DB用户并将搜索用户这个阵列中,

我尝试下面的代码,

$users = $this->admin_model->get_usersforshipment(); 
foreach ($users as $user) { 

    $filtered = array_filter($csv_array, function($user) 

    { //Below is retrurning as orignal $csv_array, not filtered, 
    return !empty($user['usernumber']); 

    }); 

} 

希望的输出,当用户$ [ 'usernumber] == 1

Array ([0] => Array ([location] => X33 [usernumber] => 1 [order] => XX [part_number] => Hi) [1] => Array ([location] => X33 [usernumber] => 1 [order] => XX [part_number] => 68730)) 

希望的输出,当用户$ [' usernumber] == 2

Array ([0] => Array ([location] => W33 [usernumber] => 2 [order] => YY [part_number] => 68741) [1] => Array ([location] => W33 [usernumber] => 2 [order] => YY [part_number] => Hello) 

如何过滤只有2阵列从多维数组?

+0

使用'array_column'然后在array_search中使用'foreach'。 –

+0

你能告诉你什么是你的欲望输出吗? $ filters是如何在过滤器之后看起来的? –

+0

@FrayneKonok,更新了期望的输出 – rjcode

回答

1

Online Example,说明您的反馈后加入。

$arr = array(
     array ('location' => 'X33', 
       'usernumber' => 1, 
       'order' => 'XX', 
       'part_number' => 'Hi' 
      ), 
     array ('location' => 'X33', 
       'usernumber' => 1, 
       'order' => 'XX', 
       'part_number' => '68730' 
       ), 
     array ('location' => 'W33', 
       'usernumber' => 2, 
       'order' => 'YY', 
       'part_number' => '68741' 
       ), 
     array ('location' => 'W33', 
       'usernumber' => 2, 
       'order' => 'YY', 
       'part_number' => 'Hello' 
      ) 
    ); 

$out = array(); 
$index = $arr[0]['usernumber']; 
foreach($arr as $val){ 
    if($index != $val['usernumber']) 
     $index = $val['usernumber']; 
    $out[$index][] = $val; 
} 
echo '<pre>'; 
print_r($out); 
+1

谢谢,这有助于很多,现在能够获得所需的输出!丹科! – rjcode

1

目前,您的数组定义,像这样:

$array = [ 
    0 => [ 
     'location' => l1 
     'usernumber' => 1 
     'order' => 'o1' 
    ], 
    1 => [ 
     'location' => l2 
     'usernumber' => 1 
     'order' => 'o2' 
    ], 
    2 => [ 
     'location' => l3 
     'usernumber' => 2 
     'order' => 'o3' 
    ] 
]; 

一个很好的解决办法是设置usernumber变量数组键。你可以在创建数组的时候这样做,或者你可以在创建后改变它。它应该是这样的:

$array = [ 
    1 => [ // The key is now the usernumber 
     [ 
      'location' => 'l1' 
      'order' => 'o1' 
     ], 
     [ 
      'location' => 'l2' 
      'order' => 'o2' 
     ] 
    ], 
    2 => [ 
     [ 
      'location' => 'l3' 
      'order' => 'o3' 
     ], 
    ] 
]; 

现在,你可以简单的抢不同的顺序由usernumber和循环通过他们:

$orders = $array[1]; // Get all orders from the user with usernumber 1 

foreach ($orders as $order) { 
    print_r($order); 
} 
+0

你可以帮我改变代码吗? – rjcode

+0

这帮助我获得具有ce号码的特定数组! – rjcode