2014-02-20 46 views
0

我有一個大型數組,並且我想根據公共ID將其分組爲其他數組,以便我可以使用array_splice獲取該ID的第一個和最後一個匹配項。從基於公共ID的多維數組中獲取多個數組

array( 
    [0] => array(id => 34, name = "walter"), 
    [1] => array(id => 25, name = "walter jr"), 
    [2] => array(id => 34, name = "saul"), 
    [3] => array(id => 25, name = "jesse"), 
    [4] => array(id => 25, name = "todd") 
    ) 

我想結束的是這樣的。

array( 
    [0] => array(
       id => 34, name = "walter", 
       id => 34, name = "saul" 
       ), 

    [1] => array(
       id => 25, name = "walter jr", 
       id => 25, name = "jesse", 
       id => 25, name = "todd" 
       ) 
    ) 

我很難試圖圍繞如何做到這一點,並已遍尋全面。我發現了一些使用array_unique和array_diff的解決方案,但我永遠無法得到我期待的結果。

+1

您無法獲得您在同一陣列中使用重複的「id」和「name」鍵顯示的結果類型。然而,這是什麼:'foreach($ array as $ a)$ result [$ a ['id']] [] = $ a ['name'];'?! – deceze

回答

2

您可以使用array_reduce到組數組元素,見下圖:

$data = array(
    0 => array('id' => 34, 'name' => "walter"), 
    1 => array('id' => 25, 'name' => "walter jr"), 
    2 => array('id' => 34, 'name' => "saul"), 
    3 => array('id' => 25, 'name' => "jesse"), 
    4 => array('id' => 25, 'name' => "todd") 
); 

$result = array_reduce($data, function ($result, $item){ 
    if (!isset($result[$item['id']])) { 
     $result[$item['id']] = array(); 
    } 
    $result[$item['id']][] = $item; 
    return $result; 
}, array()); 
print_r(array_values($result)); 

和結果是:

Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [id] => 34 
        [name] => walter 
       ) 

      [1] => Array 
       (
        [id] => 34 
        [name] => saul 
       ) 

     ) 

    [1] => Array 
     (
      [0] => Array 
       (
        [id] => 25 
        [name] => walter jr 
       ) 

      [1] => Array 
       (
        [id] => 25 
        [name] => jesse 
       ) 

      [2] => Array 
       (
        [id] => 25 
        [name] => todd 
       ) 

     ) 

) 
+0

這工作完美。謝謝。 –

0

如果你想在關鍵0,1,2,3,4 .. 。只需遍歷整個數組並覆蓋鍵。 但取決於你在做什麼,使用foreach無需密鑰遍歷數組。 = p

$all_array = array(
    0 => array('id' => 34 , 'name' => "walter") , 
    1 => array('id' => 25 , 'name' => "walter jr") , 
    2 => array('id' => 34 , 'name' => "saul") , 
    3 => array('id' => 25 , 'name' => "jesse") , 
    4 => array('id' => 25 , 'name' => "todd") 
) ; 


$array_sort = array() ; 

foreach ($all_array as $piece_array) { 
    $array_sort[$piece_array['id']][] = $piece_array ; 
} 

ksort($array_sort) ; 

var_dump($array_sort) ;