PHP array_merge_recursive 保留数字键

31

我只是想合并

$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中有效,这是最好的解决方案吗?

另一种方法是使用array_map(function ()...实现它。

2个回答

70

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',
//   ),
// )

10
等一下,合并=保留冲突键;替换=合并冲突键?!这就是为什么世界喜欢PHP... - SparK
2
谢谢 - 但这太荒谬了。这应该作为array_merge_recursive()的参数实现。 - But those new buttons though..

0

由于$a$b的键是数字,即使您将其表示为字符串文字(参见PHP:Arrays-> Syntax),因此您的期望失败。

我认为是否有更好的解决方案取决于您需要什么。 它可能比递归合并更简单:

1)您确定$a$b数组中的每个值都将再次是一个数组吗?

2)如果这些数组共享公共键(即如果在您的示例中"text"再次是"up"),应该发生什么? 保持递归合并还是不合并?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接