2016-12-28 68 views
3

我使用PHP 5.6。我有一個數組是這樣的:合併數組動態它們具有相同的鍵

$array = [ 
    0 => [ 
     '[email protected]' => [ 
      'email' => '[email protected]', 
      'firstname' => 'john', 
      'lastname' => 'drake', 
      'food' => 'burger', 
     ], 
    ], 
    1 => [ 
     '[email protected]' => [ 
      'email' => '[email protected]', 
      'firstname' => 'john', 
      'lastname' => 'drake', 
      'drink' => 'coke', 
     ], 
    ], 
    2 => [ 
     '[email protected]' => [ 
      'email' => '[email protected]', 
      'firstname' => 'sam', 
      'lastname' => 'win', 
      'food' => 'pizza', 
     ], 
    ], 
    3 => [ 
     '[email protected]' => [ 
      'email' => '[email protected]', 
      'firstname' => 'sam', 
      'lastname' => 'win', 
      'drink' => 'pepsi', 
     ], 
    ], 
]; 

比方說,「食品」和「喝」的類別,他們可以根據調查問卷是如何設置不同。所以實際上可能有「食物」,「飲料」和「甜點」等。正如你所看到的,每個人都有一個陣列,每個類別。我想這樣做是每個人合併陣列從而使得這反而有以下顯示:

$array = [ 
    0 => [ 
     '[email protected]' => [ 
      'email' => '[email protected]', 
      'firstname' => 'john', 
      'lastname' => 'drake', 
      'food' => 'burger', 
      'drink' => 'coke', // Merged 
     ], 
    ], 
    1 => [ 
     '[email protected]' => [ 
      'email' => '[email protected]', 
      'firstname' => 'sam', 
      'lastname' => 'win', 
      'food' => 'pizza', 
      'drink' => 'pepsi', // Merged 
     ], 
    ], 
]; 

我已經看過array_merge以及array_merge_recursive,但是從一切我讀過,你必須爲它們合併到指定數組,例如它必須是array_merge(array[0], array[1])。正如你所看到的,我不能完全做到這一點,因爲每個人可能有2,3甚至4個陣列需要合併在一起。

那麼,如何動態地合併陣列的每個人,以便它一起顯示他們所有的信息?

+0

簡單地遍歷它在一個環路,併產生結果 – Mojtaba

回答

0

這不正是你問,感覺很雜亂,但它可能是你可以用:)

$result = []; 

foreach ($array as $answers) { 
    foreach ($answers as $email => $values) { 
     if (!isset($result[$email])) { 
      $result[$email] = $values; 
      continue; 
     } 
     $result[$email] = array_merge($result[$email], $values); 
    } 
} 

進一步的工作和結果的結果:

$result === [ 
    '[email protected]' => [ 
     'email' => '[email protected]', 
     'firstname' => 'john', 
     'lastname' => 'drake', 
     'food' => 'burger', 
     'drink' => 'coke', 
    ], 
    '[email protected]' => [ 
     'email' => '[email protected]', 
     'firstname' => 'sam', 
     'lastname' => 'win', 
     'food' => 'pizza', 
     'drink' => 'pepsi', 
    ], 
] 
+0

這不是他想要的 – Mojtaba

+0

感謝@martindilling結果。你的回答給了我需要的結果。我希望我提出的問題結果不會讓任何人感到困惑。 – Dillon

+0

@Mojtaba,我知道這不完全是他所要求的,我開始我的回答說明:)但是當結果合併在一起,所以電子郵件是獨一無二的,我真的不明白任何理由的額外層包裝:) – martindilling

0
<?php 
$originalArray=array (
     0 => array ('[email protected]' => array ('email' => '[email protected]', 'firstname' => 'john', 'lastname' => 'drake', 'food' => 'burger')), 
     1 => array ('[email protected]' => array ('email' => '[email protected]', 'firstname' => 'john', 'lastname' => 'drake', 'drink' => 'coke')), 
     2 => array ('[email protected]' => array ('email' => '[email protected]', 'firstname' => 'sam', 'lastname' => 'win', 'food' => 'pizza')), 
     3 => array ('[email protected]' => array ('email' => '[email protected]', 'firstname' => 'sam' ,'lastname' => 'win', 'drink' => 'pepsi')) 
); 
$tempArray=array(); 
$newArray=array(); 
foreach($originalArray as $key=>$val){ 
    $valKey=key($val); 
    if(isset($tempArray[$valKey])){ 
     $newArray[]=array_merge($tempArray[$valKey],$val[$valKey]); 
    } 
    else{ 
     $tempArray[$valKey]=$val[$valKey]; 
    } 
} 
echo "<pre>";print_r($newArray); 
相關問題