0

我使用 array_merge 函数来合并两个数组。在大多数情况下,它可以正常工作

$x = array_merge(array('a' => 'x', 'b' => 'x'), array('b' => 'y', 'c' => 'y'));
var_dump($x);

// array(3) { ["a"]=> string(1) "x" ["b"]=> string(1) "y" ["c"]=> string(1) "y" }

但是对于数字情况,它会返回意外的结果

$x = array_merge(array('1' => 'x', '2' => 'x'), array('2' => 'y', '3' => 'y'));
var_dump($x);

// array(4) { [0]=> string(1) "x" [1]=> string(1) "x" [2]=> string(1) "y" [3]=> string(1) "y" }

如何防止索引重新编号?有没有办法通过基本 php 函数合并两个数组而不重新编号数字索引?

4

3 回答 3

1

如果要将第二个数组中的数组元素附加到第一个数组,同时不覆盖第一个数组中的元素并且不重新索引,请使用 + 数组联合运算符:

<?php
$array1 = array(0 => 'zero_a', 2 => 'two_a', 3 => 'three_a');
$array2 = array(1 => 'one_b', 3 => 'three_b', 4 => 'four_b');
$result = $array1 + $array2;
var_dump($result);
?>

第一个数组中的键将被保留。如果两个数组中都存在数组键,则将使用第一个数组中的元素,而忽略第二个数组中匹配键的元素。

array(5) {
 [0]=>
 string(6) "zero_a"
 [2]=>
 string(5) "two_a"
 [3]=>
 string(7) "three_a"
 [1]=>
 string(5) "one_b"
 [4]=>
 string(6) "four_b"
}

取自这里

于 2012-12-28T13:24:45.167 回答
1

手册

如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个。但是,如果数组包含数字键,则后面的值不会覆盖原始值,而是会被追加。

所以,改为使用array_replace

于 2012-12-28T13:28:28.457 回答
1

您可以array_replace()为此使用:

$x = array_replace(array('1' => 'x', '2' => 'x'), array('2' => 'y', '3' => 'y'));
var_dump($x);

输出:

array(3) {
  [1]=>
  string(1) "x"
  [2]=>
  string(1) "y"
  [3]=>
  string(1) "y"
}
于 2012-12-28T13:29:00.943 回答