array_merge会执行重新索引吗?

4

假设我有一个关联数组,它的键是字母字符串。如果我将一些内容合并到这个数组中,它将成功地合并而无需重新索引。

$arr1 = array('john'=>'JOHN', 'marry'=>'Marry');
$arr1 = array_merge(array('78'=>'Angela'),$arr1);
print_r($arr1);

那么这将正确地将新组件合并到数组中,并且它的输出将是:
Array
(
    [0] => Angela
    [john] => JOHN
    [marry] => Marry
)

但是当我尝试像这样做相同的事情时
 $arr1 = array('34'=>'JOHN', '04'=>'Marry');
 $arr1 = array_merge(array('78'=>'Angela'),$arr1);
 print_r($arr1);

然后它的输出就像这样。
Array
(
    [0] => Angela
    [1] => JOHN
    [04] => Marry
)

有人可以描述一下这个场景吗?另外,我想在合并后使我的数组像这样。

Array
    (
        [78] => Angela
        [34] => JOHN
        [04] => Marry
    )

我该如何实现这个目标?

2
返回翻译文本:print_r($arr1+$arr2); - splash58
谢谢您的回复@splash58.....但是您能描述一下为什么array_merge不能做到这一点吗? - SNishant
输入数组中具有数字键的值将被重新编号,并以从零开始的增量键在结果数组中重新排列。- http://php.net/manual/zh/function.array-merge.php - splash58
“04” 被视为字符串索引。 - splash58
2个回答

2
根据定义,array_merge 函数会重新索引数字索引。具有数值的字符串也是数字索引。
要避免这种行为,请使用 $arr1+$arr2 连接数组。

1
您不需要使用array_merge(),只需将数组相加即可:
$arr1 = [
  '10' => 'Angela',
  'john' => 'JOHN',
  'marry' => 'Marry',
];

$arr2 = [
  '78' => 'Angela'
];

$arr3 = $arr2 + $arr1;

array_merge() - … 在输入数组中具有数字键的值将会在结果数组中用从零开始递增的键重新编号。


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