我最近学习了如何在 PHP 中使用 + 运算符连接2个数组。
但考虑到这个密码。
$array = array('Item 1'); $array += array('Item 2'); var_dump($array);
输出是
Array (1){[0] = > string (6)”项 1”}
为什么这样不行?跳过速记和使用 $array = $array + array('Item 2')也不起作用。跟钥匙有关吗?
$array = $array + array('Item 2')
说说看
$array[] = array('Item 2');
虽然它看起来像你试图添加一个数组到一个数组,因此 $array[][],但这不是你的标题建议。
$array[][]
两者都有一个 0键,组合数组的方法将折叠重复数据。尝试使用 array_merge()代替。
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
将一个或多个数组的元素合并在一起,以便将其中一个数组的值追加到前一个数组的末尾。它返回结果数组。
尝试 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';
+称为 Union 运算符,它不同于 Concatenation 运算符(PHP 没有用于数组的运算符)。描述明确表示:
+ 运算符将右手数组中剩余键的元素附加到左手数组中,而重复键不会被覆盖。
举个例子:
$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。
array_merge
这确实是一个键冲突。当连接数组时,重复的键不会被覆盖。
相反,您必须使用 array_merge()
$array = array_merge(array('Item 1'), array('Item 2'));
我以前的一些答案是不正确的! (可以将答案从最古老的到最新的进行排序)。
array_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); ?>
你可以使用接线员。 $array3 = $array1. $array2;
这适用于非关联数组:
while(($item = array_shift($array2)) !== null && array_push($array1, $item));
使用压板(或扩展)操作符:
$animals = ['dog', 'cat', 'snake', 'pig', 'chicken']; $fruits = ['apple', 'banana', 'water melon']; $things = [...$animals, ...$fruits];
来源: https://www.kindacode.com/article/merging-arrays-in-php-7/