Posted at

array_merge_recursiveで文字列が配列になる

array_merge_recursiveではまったのでメモ。

デフォルト値に対してPOSTされてきた値で上書きするって感じで下記の様なコードを書いてみました。

$default = [

'Model' => [
'title' => 'DefaultTitle'
]
];
$post = [
'Model' => [
'title' => 'PostTitle',
'user_name' => 'Ryuji'
]
];
var_dump(array_merge_recursive($default, $post));

期待してる結果は下記のような感じだったんですが…

array(1) {

["Model"]=>
array(2) {
["title"]=>
string(9) "PostTitle"
["user_name"]=>
string(5) "Ryuji"
}
}

結果はこちら

array(1) {

["Model"]=>
array(2) {
["title"]=>
array(2) {
[0]=>
string(12) "DefaultTitle"
[1]=>
string(9) "PostTitle"
}
["user_name"]=>
string(5) "Ryuji"
}
}

title が配列になって "DefaultTitle" と "PostTitle" が入ってきました^^;

この例だと array_merge で十分だけど、2階層目のキーの有無が増えると、array_mergeだと足りないのよね…

このときはCakePHP2だったんで、Hash::mergeつかってやりたいことは実現できたけど、なかったら自前で処理するのをつくらないとダメですかねぇ。