Can';在PHP中连接2个数组

Can';在PHP中连接2个数组,php,arrays,concatenation,Php,Arrays,Concatenation,我最近学习了如何在PHP中使用+运算符连接两个数组 但是考虑这个代码… $array = array('Item 1'); $array += array('Item 2'); var_dump($array); 输出为 数组(1){[0]=>字符串(6)”项 1“} 为什么这不起作用?跳过速记并使用$array=$array+array('Item 2')也不起作用。这和钥匙有关吗?试着说 $array[] = array('Item 2'); 虽然看起来您试图将数组添加到数组中,因

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

但是考虑这个代码…

$array = array('Item 1');

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

var_dump($array);
输出为

数组(1){[0]=>字符串(6)”项 1“}

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

试着说

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

虽然看起来您试图将数组添加到数组中,因此,
$array[][]
但这不是您的标题所建议的。

两者都有一个键
0
,组合数组的方法将折叠重复项。尝试改用
array\u 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\u merge()

请参阅此处的文档:

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

尝试数组合并

$array1 = array('Item 1');

$array2 = array('Item 2');

$array3 = array_merge($array1, $array2);
我认为这是因为你没有给它们分配一个键,所以它们都有0的键,+没有重新索引,所以它试图重写它

$array = array('Item 1');

array_push($array,'Item 2');


+
称为并集运算符,它不同于串联运算符(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
的条目,因此结果是预期的


要连接,请使用。

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

相反,你必须使用


在我看来,以前的一些答案是不正确的! (可以将答案从最早的答案排序到最新的答案)

实际上合并了数组,这意味着,如果数组有一个公共项,其中一个副本将被忽略。
+
(联合)也是如此

我没有找到这个问题的“解决方法”,但要手动完成它

下面是:

<?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\u shift($array2))!==null&&array\u push($array1,$item))

使用splat(或排列)操作符:

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

来源:

不一样。您将得到
array('Item 1',array('Item 2'))
,一个多维数组。对,这是我认为他想要的。(相关)请注意,array\u merge函数仍将折叠非数字数组键的副本。例如array_merge(array(“color”=>“red”)、array(“color”=>“green”))将生成array的值(“color”=>“green”);$arr1=array('foo');//与array(0=>“foo”)$arr2=array('bar');与array(0=>“bar')//将包含数组('bar');$combined=array_merge($arr1,$arr2);
array(123=>'foo')
数组('code>相同123“=>‘foo’)
如果键是整数,则在使用
数组\u merge
时会忽略它们。请注意,这是错误的。
数组\u merge
仅当它们是具有相同键的关联数组时才会忽略结果数组中的项。对于数值数组,所有项都会合并到一个新数组中,其长度是原始数组的精确和l数组。在本例中,您使用的是数字数组,这意味着
array\u merge
对您来说可以完美地工作。我同意
array\u merge
不应该用于关联数组,但很明显,这不是您在这里显示的内容。@JMTyler+1非常好的注释!我应该选择一个使用关联数组的示例。我发布此答案的主要原因是,已接受的答案使用了
+
,除非键不同,否则不应在这两种情况下使用(关联或非关联)。数组合并将包含相同项的重复项。“以前的所有答案都不正确”没有帮助,因为答案会根据投票重新排序。@ChristianeScuyer很容易看到每个答案旁边的日期/小时。这是一个concat运算符。最后会有几个通知和“ArrayArray”。
<?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);
?>
  $animals = ['dog', 'cat', 'snake', 'pig', 'chicken'];
  $fruits = ['apple', 'banana', 'water melon'];
  $things = [...$animals, ...$fruits];