【问题标题】:Merge array with same keys, array_merge_recursive doesn't work as expected合并具有相同键的数组,array_merge_recursive 不能按预期工作
【发布时间】:2015-05-29 04:12:01
【问题描述】:

我有两个以 ids 作为键的数组和一些字段,我想合并它们,但我不明白为什么它不起作用,这是我的示例代码:

$Podcasts1 = array("1234" => array('title' => "myTitle", "type" => "myType"));
$Podcast2 = array("1234" => array("content" => "myContent"));
$podcasts = array_merge_recursive($Podcasts1, $Podcast2);
var_dump($Podcasts1, $Podcast2, $podcasts);

有结果:

array:1 [▼
  1234 => array:2 [▼
    "title" => "myTitle"
    "type" => "myType"
  ]
]
array:1 [▼
  1234 => array:1 [▼
    "content" => "myContent"
  ]
]
array:2 [▼
  0 => array:2 [▼
    "title" => "myTitle"
    "type" => "myType"
  ]
  1 => array:1 [▼
    "content" => "myContent"
  ]
]

还有我想要的结果:

array:[
1234 => array(
        "title" => "myTitle"
        "type" => "myType"
        "content" => "myContent")
]

我不明白为什么 PHP.net 上给出的代码可以工作而我的不行

代码:

$ar1 = array("color" => array("favorite" => "red"), 5);
$ar2 = array(10, "color" => array("favorite" => "green", "blue"));
$result = array_merge_recursive($ar1, $ar2);

结果:

Array
(
    [color] => Array
        (
            [favorite] => Array
                (
                    [0] => red
                    [1] => green
                )

            [0] => blue
        )

    [0] => 5
    [1] => 10
)

【问题讨论】:

  • 如果键是数字,它将附加值而不是将其合并到一个数组中
  • 我将使用“id_124”作为密钥,谢谢。

标签: php arrays merge array-merge


【解决方案1】:

将密钥 1234 更改为类似字符串

 $Podcasts1 = array('a' => array('title' => "myTitle", "type" => "myType"));
 $Podcast2 = array('a' => array("content" => "myContent"));
 $podcasts = array_merge_recursive($Podcasts1, $Podcast2);
 var_dump($Podcasts1, $Podcast2, $podcasts);

array_merge_recursive 适用于字符串键。

【讨论】:

  • 谢谢!它正在工作,它解释了为什么我的代码不起作用,但我需要这些 id 来识别两个数组中何时是同一个播客。除了在 id 的开头添加一个字符串(比如“a124”就是做我想做的事的坏方法......)
  • 如果你使用 array_merge_recursive 那么你必须使用像 id_1234 这样的字符串键。
【解决方案2】:

正如功能描述所说,它不适用于数字键

如果输入数组有相同的字符串键,那么这些键的值被合并到一个数组中,这是递归完成的,所以如果其中一个值是一个数组本身,函数会将它与另一个数组中的相应条目也是如此。但是,如果数组具有相同的数字键,则后面的值不会覆盖原始值,而是会被追加。

Ref Link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多