无法在PHP中连接2个数组

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

但是考虑这个代码…

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

输出是

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

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

两者都有一个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; 

编辑:添加了一个代码片段来澄清

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

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

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

+操作符将右手arrays中剩余键的元素附加到左手,而重复键不会被覆盖。

举个例子:

 $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

以前的所有答案都不正确! 合并实际上是合并数组,意思是说,如果数组有一个共同的项目,其中一个副本将被省略。 工会也一样

我没有find这个问题的“解决办法”,但实际上手动做…

这里是:

 <?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); ?> 

尝试array_merge。

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

我认为它是因为你没有分配任何一个密钥,所以他们都有0的关键,+不重新索引,所以它试图重写。

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

要么

 $array[] = 'Item 2'; 

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

相反,你必须使用array_merge()

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

试着说

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

虽然它看起来像你试图添加一个数组到一个数组,因此$array[][]但这不是你的标题build议。

你可以使用操作员。 $ array3 = $ array1。$ array2;