tohokuaikiのチラシの裏

技術的ネタとか。

PHPで配列を再帰的にマージしてくれる関数

設定値を配列にしておいて、ある一部分だけ上書きしてしまいたい場合。
普通に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);