2010-01-21 128 views
3

說我有一個相同的結構,像這樣一對夫婦多維動數組:PHP:合併/添加多維數組?

$basketA['fruit']['apple'] = 1; 
$basketA['fruit']['orange'] = 2; 
$basketA['fruit']['banana'] = 3; 
$basketA['drink']['soda'] = 4; 
$basketA['drink']['milk'] = 5; 

$basketB['fruit']['apple'] = 2; 
$basketB['fruit']['orange'] = 2; 
$basketB['fruit']['banana'] = 2; 
$basketB['drink']['soda'] = 2; 
$basketB['drink']['milk'] = 2 

我需要一種方式,一種方式將它們合併,所以我會得到這樣的:

$basketC['fruit']['apple'] = 3; 
$basketC['fruit']['orange'] = 4; 
$basketC['fruit']['banana'] = 5; 
$basketC['drink']['soda'] = 6; 
$basketC['drink']['milk'] = 7; 

實多維數組將會更加複雜,這個只是爲了解釋我需要的東西。

謝謝!

+1

退房array_merge_recursive – Yada 2010-01-21 22:02:33

回答

6

它不可能與PHP的標準方法,你應該寫自己的函數:

代碼

function readArray($arr, $k, $default = 0) { 
    return isset($arr[$k]) ? $arr[$k] : $default ; 
} 

function merge($arr1, $arr2) { 
    $result = array() ; 
    foreach($arr1 as $k => $v) { 
     if(is_numeric($v)) { 
      $result[$k] = (int)$v + (int) readArray($arr2, $k) ; 
     } else { 
      $result[$k] = merge($v, readArray($arr2, $k, array())) ; 
     } 
    } 
    return $result ; 
} 

測試

$basketA = array("fruit" => array(), "drink" => array()) ; 
$basketA['fruit']['apple'] = 1; 
$basketA['fruit']['orange'] = 2; 
$basketA['fruit']['banana'] = 3; 
$basketA['drink']['soda'] = 4; 
$basketA['drink']['milk'] = 5; 

$basketB = array("fruit" => array(), "drink" => array()) ; 
$basketB['fruit']['apple'] = 2; 
$basketB['fruit']['orange'] = 2; 
$basketB['fruit']['banana'] = 2; 
$basketB['drink']['soda'] = 2; 
$basketB['drink']['milk'] = 2; 

$basketC = merge($basketA, $basketB) ; 
print_r($basketC) ; 

輸出

Array 
(
    [fruit] => Array 
     (
      [apple] => 3 
      [orange] => 4 
      [banana] => 5 
     ) 

    [drink] => Array 
     (
      [soda] => 6 
      [milk] => 7 
     ) 

) 
+0

真棒謝謝! – 2010-01-22 14:31:15

+0

越野車:http://stackoverflow.com/questions/2119647/php-problem-merging-array – 2010-01-22 22:37:04