【问题标题】:php array_merge_recursive preserving numeric keysphp array_merge_recursive 保留数字键
【发布时间】:2012-08-16 14:48:16
【问题描述】:

我只想合并

$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 个级别的数组)?

另一种解决方法是使用 array_map(function ()...

【问题讨论】:

    标签: php array-merge


    【解决方案1】:

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

    【讨论】:

    • 等待...合并=保留冲突键;替换=合并冲突的键?!这就是为什么全世界都喜欢 php...
    • 谢谢 - 但太荒谬了。这应该作为array_merge_recursive() 的参数实现。
    【解决方案2】:

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

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

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

    2) 如果这些数组共享一个公共密钥(即,如果 "text" 在您的示例中再次成为 "up")会发生什么?是否继续递归合并?

    【讨论】:

      猜你喜欢
      • 2011-01-04
      • 2015-02-01
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      相关资源
      最近更新 更多