ある設定配列$configがあるとして、携帯用に$mobile_configってのがあって、だけどその$mobile_configには、$configとの「差分だけ」を書きたいって場合。
<?php $config = array( 'num_per_page' => array( 'news' => 10, 'article' =>10, 'member' => 10, ) 'dsn' => 'mysql://hoge:hoge@localhost' ); $mobile_config => array( 'num_per_page' => array( 'article' => 5 ) )
とかで、なんかで、むにょむにょっとやると
<?php $config = array( 'num_per_page' => array( 'news' => 10, 'article' =>5, 'member' => 10, ) 'dsn' => 'mysql://hoge:hoge@localhost' );
みたいになってくれるの。
単純なarray_mergeだと、上手くいかない。
んで、array_merge_exって再帰関数を作る。これだと、
<?php function array_merge_ex(&$arr1, $arr2) { foreach ($arr2 as $key=>$value){ if (isset($arr1[$key])){ if (is_array($value)){ array_merge_ex($arr1[$key], $value); } else { $arr1[$key] = $value; } } } } $arr1 = array( 'var' => array( 'var1' => 3, 'var2' => 4, 'var3' => 6, ), 'foo' => 7, 'bar' => array( 'bar1' => array( 'bar1-1' => 'hogehoge', 'bar1-2' => 'aaaaaaaaaaa' ), ), ); $arr2 = array( 'var' => array( 'var2' => 444444, 'var4' => 2222222 ), 'foo' => 777777, 'bar' => array( 'bar1' => array( 'bar1-1' => 'ukiuki' ), ), ); array_merge_ex($arr1, $arr2); var_export($arr1);
結果は、
<?php array ( 'var' => array ( 'var1' => 3, 'var2' => 444444, 'var3' => 6, ), 'foo' => 777777, 'bar' => array ( 'bar1' => array ( 'bar1-1' => 'ukiuki', 'bar1-2' => 'aaaaaaaaaaa', ), ), )
ま、何てことないネタですが。