无法在PHP中连接2个数组

ale*_*lex 55 php arrays concatenation

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

但请考虑这段代码......

$array = array('Item 1');

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

var_dump($array);
Run Code Online (Sandbox Code Playgroud)

输出是

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

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

awg*_*wgy 119

两者都有一个密钥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);
Run Code Online (Sandbox Code Playgroud)

如果数组中的元素使用不同的键,则+运算符更合适.

$arr1 = array('one' => 'foo');
$arr2 = array('two' => 'bar');

// Will contain array('one' => 'foo', 'two' => 'bar');
$combined = $arr1 + $arr2;
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,array_merge函数仍将折叠非数字数组键的重复项.例如array_merge(array("color"=>"red"),array("color"=>"green"))将产生数组的值("color"=>"green"; (21认同)

Ser*_*ler 12

使用 splat (或 spread )运算符:

  $animals = ['dog', 'cat', 'snake', 'pig', 'chicken'];
  $fruits = ['apple', 'banana', 'water melon'];
  $things = [...$animals, ...$fruits];
Run Code Online (Sandbox Code Playgroud)

来源: https: //www.kindacode.com/article/merging-arrays-in-php-7/


Chr*_*man 8

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

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


dec*_*eze 6

+被称为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"
}
Run Code Online (Sandbox Code Playgroud)

由于两个数组都有一个带密钥的条目0,因此结果是预期的.

要连接,请使用array_merge.


alf*_*sin 6

之前的所有答案都不正确! 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);
?>
Run Code Online (Sandbox Code Playgroud)

  • 这是错误的.`array_merge`只会在结果数组中省略项目,如果它们是具有相同键的_associative_数组.对于数值数组,_all_项合并为一个新数组,其长度是原始数组的精确总和.在示例中,您使用的是数值数组,这意味着`array_merge`可以完美地为您工作.我同意`array_merge`不应该用于关联数组,但很明显,这不是你在这里展示的. (17认同)
  • “先前的所有答案都不正确”无济于事,因为答案会根据选票进行重新排序。 (3认同)