2015-03-13 42 views
0

我想避免如果可能的話foreach與if結合使用。我想搜索數組,取出匹配並在結果上創建新的基礎。PHP - 在數組中搜索並創建新的

在這個例子中我要爲每個OS創建單獨的陣列 -

$os1 = $array; 
$os2 = $array... 

陣列看起來像這樣:

$array = [ 
      0 => [ 
       'id' => 1, 
       'name' => 'name', 
       'os' => 1 
      ], 
      1 => [ 
       'id' => 2, 
       'name' => 'name', 
       'os' => 1 
      ], 
      2 => [ 
       'id' => 3, 
       'name' => 'name', 
       'os' => 2 
      ], 
      3 => [ 
       'id' => 3, 
       'name' => 'name', 
       'os' => 2    
      ] 
    ]; 
+0

爲什麼你想避免的foreach? - 也嘗試重寫你的問題,而不使用'for each';) – user3012759 2015-03-13 13:42:39

+0

我認爲你可以使用函數'array_map' – 2015-03-13 13:47:24

+0

你想要的輸出是什麼? – 2015-03-13 13:52:17

回答

2

使用array_filter到輸入陣列降低到預期的結果

$os = 1; 
$data = array_filter($array, function($item) use ($os) { 
    return $item['os'] == $os; 
}); 
+0

這是我需要的。它像一個魅力。感謝幫助我:) – Sasha 2015-03-13 14:47:52

0

短一個

$os1 = []; 
$os2 = []; 
$os3 = []; 

foreach ($array as $item) { 
    ${'os' . $item['os']}[] = array('id' => $item['id'], 'name' => $item[$name]; 
} 

最好的一個

$os1 = []; 
$os2 = []; 
$os3 = []; 

foreach ($array as $item) { 
    switch($item['os']) { 
     case 1: 
      $os1[] = array('id' => $item['id'], 'name' => $item[$name]); 
      break; 
     case 2: 
      $os2[] = array('id' => $item['id'], 'name' => $item[$name]); 
      break; 
     case 3: 
      $os3[] = array('id' => $item['id'], 'name' => $item[$name]); 
      break; 
     default: 
      throw new Exception('Unknown Os'); 
    } 
} 

你也可能要分配的array($item['id'] => $item[$name]);代替array('id' => $item['id'], 'name' => $item[$name]);

$os1 = []; 
$os2 = []; 
$os3 = []; 

foreach ($array as $item) { 
    ${'os' . $item['os']}[] = array($item['id'] => $item[$name]); 
}