2016-05-29 55 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