2013-10-21 118 views
0

我有2列:PHP遞歸數組合並

$bigArr = array(
    'simple'=>1 
    'advanced'=>array(
     'advanceSimple'=>1, 
     'advanceadvance'=>array(
      'simple'=>1 
     ) 
    ) 
) 

$overide = array(
    'advanced'=>array(
     'advanceSimple'=>2, 
     'extra'=>5 
    ) 
) 

那些2的合併應該是:

$bigArr = array(
    'simple'=>1 
    'advanced'=>array(
     'advanceSimple'=>2, 
     'extra'=>5, 
     'advanceadvance'=>array(
      'simple'=>1 
     ) 
    ) 
) 

你看到小陣的overiden將在此改變只是其中的鍵存在,並會在不存在的地方添加數據。

我嘗試了很多遞歸迭代器和循環的方法,但仍然沒有去。

您有任何想法或類似的解決方法。

+0

您是否嘗試過使用'array_merge'? – Karl

+1

可能是你需要的是array_merge_recursive – ohmygirl

回答

1
$bigArr = array(
    'simple'=>1, 
    'advanced'=>array(
     'advanceSimple'=>1, 
     'advanceadvance'=>array(
      'simple'=>1 
     ) 
    ) 
); 
$overide = array(
    'advanced'=>array(
     'advanceSimple'=>2, 
     'extra'=>5 
    ) 
); 
$res = array_merge_recursive($bigArr,$overide); 

是你需要的嗎?

+0

其不是所需的結果.. advanceSimple變成了帶有條目的數組.. ..而不是整數 – Svetoslav

0

答案PHP 5.3 +

$bigArr = array(
    'simple'=>1, 
    'advanced'=>array(
     'advanceSimple'=>1, 
     'advanceadvance'=>array(
      'simple'=>1 
     ) 
    ) 
); 
$overide = array(
    'advanced'=>array(
     'advanceSimple'=>2, 
     'extra'=>5 
    ) 
); 
$array = array_replace_recursive($bigArr,$overide); 
echo "<pre>"; 
print_R($array);