无法在PHP中连接2个数组

时间:2010-04-16 02:22:32

标签: php arrays concatenation

我最近学会了如何使用PHP中的+运算符连接2个数组。

但请考虑这段代码......

$array = array('Item 1');

$array += array('Item 2');

var_dump($array);

输出

  

array(1){[0] => string(6)“Item   1“}

为什么这不起作用?跳过速记并使用$array = $array + array('Item 2')也不起作用。它与钥匙有关吗?

11 个答案:

答案 0 :(得分:107)

两者都有0的密钥,组合数组的方法会折叠重复项。请尝试使用array_merge()

$arr1 = array('foo'); // Same as array(0 => 'foo')
$arr2 = array('bar'); // Same as array(0 => 'bar')

// Will contain array('foo', 'bar');
$combined = array_merge($arr1, $arr2);

如果数组中的元素使用不同的键,+运算符将更合适。

$arr1 = array('one' => 'foo');
$arr2 = array('two' => 'bar');

// Will contain array('one' => 'foo', 'two' => 'bar');
$combined = $arr1 + $arr2;

修改:添加了代码段以澄清

答案 1 :(得分:8)

使用array_merge()
请参阅此处的文档:
http://php.net/manual/en/function.array-merge.php

  

将一个或多个数组的元素合并在一起,以便将一个值的值附加到前一个数组的末尾。它返回结果数组。

答案 2 :(得分:6)

+被称为Union运算符,它与Concatenation运算符不同(PHP没有一个用于数组)。 description清楚地说:

  

+运算符将右手数组中剩余键的元素附加到左手,而重复的键不会被覆盖。

以示例:

$a = array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");
$c = $a + $b;

array(3) {
  ["a"]=>
  string(5) "apple"
  ["b"]=>
  string(6) "banana"
  ["c"]=>
  string(6) "cherry"
}

由于您的数组都有一个带有键0的条目,因此结果是预期的。

要连接,请使用array_merge

答案 3 :(得分:6)

之前的所有答案都不正确! merge 实际上合并了数组,这意味着,如果数组具有公共项,则将省略其中一个副本。同样适用于联盟

我没有为这个问题找到“解决方法”,但实际上是手动执行...

在这里:

<?php
$part1 = array(1,2,3);
echo "array 1 = \n";
print_r($part1);
$part2 = array(4,5,6);
echo "array 2 = \n";
print_r($part2);
$ans = NULL;
for ($i = 0; $i < count($part1); $i++) {
    $ans[] = $part1[$i];
}
for ($i = 0; $i < count($part2); $i++) {
    $ans[] = $part2[$i];
}
echo "after arrays concatenation:\n";
print_r($ans);
?>

答案 4 :(得分:3)

尝试使用array_merge。

$array1 = array('Item 1');

$array2 = array('Item 2');

$array3 = array_merge($array1, $array2);

我认为它是因为你没有给任何一个键赋值,所以它们都有0的键,并且+没有重新索引,所以它试图重写它。

答案 5 :(得分:2)

$array = array('Item 1');

array_push($array,'Item 2');

$array[] = 'Item 2';

答案 6 :(得分:2)

这确实是一个关键的冲突。连接数组时,不会覆盖重复的键。

相反,您必须使用array_merge()

$array = array_merge(array('Item 1'), array('Item 2'));

答案 7 :(得分:2)

使用 splat(或 spread)运算符:

  $animals = ['dog', 'cat', 'snake', 'pig', 'chicken'];
  $fruits = ['apple', 'banana', 'water melon'];
  $things = [...$animals, ...$fruits];

来源:https://www.kindacode.com/article/merging-arrays-in-php-7/

答案 8 :(得分:0)

这适用于非关联数组:

while(($item = array_shift($array2)) !== null && array_push($array1, $item));

答案 9 :(得分:-3)

试着说

$array[] = array('Item 2'); 

虽然看起来你正在尝试将数组添加到数组中,因此$array[][]但这不是你的标题所暗示的。

答案 10 :(得分:-5)

您可以使用运营商。 $ array3 = $ array1。$ array2;