无法在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;