設定値を配列にしておいて、ある一部分だけ上書きしてしまいたい場合。
普通にarray_merge使うと、小回りが利かないですよね。
ということで、こんな関数。
<?php function array_merge_replace_recursive(&$origin, $extend) { foreach ($extend as $e_key=>$e_value){ if (!array_key_exists($e_key, $origin)){ $origin[$e_key] = $e_value; } else { if (!is_array($e_value)){ $origin[$e_key] = $e_value; } else { array_merge_replace_recursive($origin[$e_key], $e_value); } } } } $a = array( 'a' => array( 'a1' => 1, 'a2' => 2, 'a3' => array( 'a3-A1' => 3333, 'a3-A2' => 4444, ) ), 'b' => 'abc', ); $b = array( 'a' => array( 'a1' => 123, 'a3' => array( 'a3-A2' => 55555, 'a3-A3' => 66666, ) ) ); array_merge_replace_recursive($a, $b); var_dump($a);