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つかってやりたいことは実現できたけど、なかったら自前で処理するのをつくらないとダメですかねぇ。