问题
I would simply like to merge
$a = array("59745506"=>array("up" => 0,));
$b = array("59745506"=>array("text" => "jfrj"));
$c = array_merge_recursive_new($a, $b);
result:
Array
(
[0] => Array
(
[up] => 0
)
[1] => Array
(
[text] => jfrj
)
)
expected result:
Array
(
[59745506] => Array
(
[up] => 0
[text] => jfrj
)
)
the 2nd comment in http://www.php.net/manual/en/function.array-merge-recursive.php is working, is it the best solution for my case (where I need to merge arrays with multiple numeric keys, and with 2 levels)?
another workaround would be to implement it with array_map(function ()...
回答1:
The array_replace_recursive() function looks to be what you need.
$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',
// ),
// )
回答2:
Your expectation fails as the key of the $a
and $b
is numeric(!), even though you denoted it as a string literal (cf. PHP: Arrays -> Syntax).
I think whether or not there is a better solution depends on what you exactly need. It might be simpler than merging recursively:
1) Are you sure that every value inside the $a
and $b
arrays will always be an array again?
2) What is supposed to happen if these arrays share a common key (i.e. if "text"
was again "up"
in your example)? Keep merging recursively or not?
来源:https://stackoverflow.com/questions/12051782/php-array-merge-recursive-preserving-numeric-keys