2011-10-19 112 views
1
$arr = array('one' => array('one_1' => array('one_2' => '12')), 'two', 'three'); 
$arr2 = array('one_2' => 'twelve'); 

$merge = array_merge($arr, $arr2); 

print '<pre>'; 
var_dump($merge); 
print '</pre>'; 

給出:使用相同的密鑰合併兩個陣列但深度不同?

array(4) { 
    ["one"]=> 
    array(1) { 
    ["one_1"]=> 
    array(1) { 
     ["one_2"]=> 
     string(2) "12" 
    } 
    } 
    [0]=> 
    string(3) "two" 
    [1]=> 
    string(5) "three" 
    ["one_2"]=> 
    string(6) "twelve" 
} 

我想要的關鍵one_2第一陣列中的值與第二陣列中的相同的密鑰的值來代替。因此,結果將是:

array(4) { 
    ["one"]=> 
    array(1) { 
    ["one_1"]=> 
    array(1) { 
     ["one_2"]=> 
     string(2) "twelve" 
    } 
    } 
    [0]=> 
    string(3) "two" 
    [1]=> 
    string(5) "three" 
} 

回答

1
array_walk_recursive($arr, function (&$value, $key, $replacements) { 
    if (isset($replacements[$key])) { 
     $value = $replacements[$key]; 
    } 
}, $arr2); 

注意,這裏使用PHP 5.3+的語法。

+0

我明白了。我們正在使用5.2: - \ – jilseego

+0

然後,您可以簡單地將其重寫爲普通函數聲明或者甚至使用'create_function'。見http://www.php.net/manual/en/language.pseudo-types.php#language.types.callback和http://www.php.net/array_walk_recursive – deceze

相關問題