2014-06-29 24 views
-1

我有這些數組,我想將它們組合起來並創建一個數組結果。加入數組的最簡單的方法PHP

$a[2][3][4][5] = Array('amt' => 20, 'comm' => 10); 
$b[2][3]  = Array('amt' => 30, 'comm' => 20); 
$c[2][3][4][6] = Array('amt' => 40, 'comm' => 30); 
$d[2][3][7] = Array('amt' => 50, 'comm' => 40); 

我試過使用array_merge_recursive()但沒有運氣。

我預期的結果是:

[2] => Array( 
    [3] => Array (
     [amt] => 30, 
     [comm] => 20, 
     [4] => Array ( 
      [5] => Array(
       [amt] => 20, 
       [comm] => 10 
      ), 
      [6] => Array(
       [amt] => 40, 
       [comm] => 30 
      ) 
     ), 
     [7] => Array(
       [amt] => 50, 
       [comm] => 40 
      ) 
    ) 
) 

我只希望要合併所有相同的密鑰,並生成一個綜合作用的結果

+3

你認爲結果是什麼? – hobbs

+0

歡迎來到SO;爲了我們更好地幫助您,您需要提供至少預期的輸出,數組應該如何組合,以及爲什麼您嘗試失敗。 –

+0

=> Array([3] => Array( [4] => Array( [5] => Array([amt] => 20,[comm] => 10) [6] = >陣列([amt] => 40,[comm] => 30) \t \t \t),[amt] => 30,[comm] => 20 [7] => Array([amt] => 50 ,[comm] => 40 ) ) – user3782464

回答

1

相反的array_merge_recursive()你應該使用array_replace_recursive()

$result = array_replace_recursive($a, $b, $c, $d); 

在你的情況,如果你更換$a ... $b$result每項任務,它的行爲。

+0

謝謝你,你拯救我的世界 – user3782464

0

它很難告訴你在使用本作或爲什麼你的陣列是什麼以這種方式設置,但我不認爲有一種簡單的方法可以在不編寫自己的代碼的情況下做你想做的事情。這是幾個原因。 1)你的數組結構不一樣。例如獲得「通訊」的價值觀出數組$ a和$ b你可以使用這些變量:如果你要合併它們

$a[2][3][4][5]['comm'] // equals 10 
$b[2][3]['comm']  // equals 20 

2),最終陣列會由有陣列兩個值和更多的數組。這不是問題,但它肯定使事情變得更加複雜。另外,通常當你很難將數組放在一起時,從數據中取出數據可能同樣困難。

3)同樣,它很難告訴你正在使用它,但是將每個數據數組添加到同一個一維數組會更容易嗎?這樣的結果是這樣的:

Array (
    [0] = Array('amt' => 20, 'comm' => 10), 
    [1] = Array('amt' => 30, 'comm' => 20), 
    [2] = Array('amt' => 40, 'comm' => 30), 
    [3] = Array('amt' => 50, 'comm' => 40) 
) 

如果不這樣做,然後你最好的選擇將是使對方內線四個迴路(每個數組維度)的任何簡單的方法。在每個循環內找出數據是具有更多數組的數組,還是具有要添加的值的數組。如果它的值,然後將它們添加到合併數組,如果它只是另一個數組,然後添加一個空數組並繼續下一個循環。它有點難以解釋,但寫出來會讓我永遠。