2011-10-19 10 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>'; 

ができます:同じキーで異なる深さの2つの配列をマージしますか?

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

関連する問題