在 PHP 中不能连接两个数组

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

但考虑到这个密码。

$array = array('Item 1');


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


var_dump($array);

输出是

Array (1){[0] = > string (6)”项 1”}

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

127525 次浏览

说说看

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

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

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