単純にマージしたい
$a = array("59745506"=>array("up" => 0,));
$b = array("59745506"=>array("text" => "jfrj"));
$c = array_merge_recursive_new($a, $b);
結果:
Array
(
[0] => Array
(
[up] => 0
)
[1] => Array
(
[text] => jfrj
)
)
期待される結果:
Array
(
[59745506] => Array
(
[up] => 0
[text] => jfrj
)
)
http://www.php.net/manual/en/function.array-merge-recursive.php の2番目のコメントは機能していますが、これは私の場合に最適なソリューションですか(必要な場合)複数の数値キーと2つのレベルを持つ配列をマージしますか?
別の回避策は、array_map(function()..で実装することです。
array_replace_recursive()
関数はあなたが必要としているもののようです。
$a = array("59745506" => array("up" => 0,));
$b = array("59745506" => array("text" => "jfrj"));
$c = array_replace_recursive($a, $b);
var_export($c);
// array (
// 59745506 =>
// array (
// 'up' => 0,
// 'text' => 'jfrj',
// ),
// )
$a
および$b
のキーが数値(!)であるため、文字列リテラルとして指定したにもかかわらず、期待は失敗します(cf. PHP:Arrays-> Syntax )。
より良い解決策があるかどうかは、あなたが正確に必要としているものに依存すると思います。再帰的にマージするよりも簡単かもしれません。
1)$a
および$b
配列内のすべての値が常に再び配列になると確信していますか?
2)これらの配列が共通のキーを共有している場合(つまり、この例では"text"
が再び"up"
だった場合)はどうなるでしょうか。再帰的にマージし続けるかどうか?