我最近学习了如何在PHP中使用+运算符连接2个数组。
但是考虑一下这段代码...
$array = array('Item 1');
$array += array('Item 2');
var_dump($array);
输出为
array(1){[0] =>字符串(6)“项目1”}
为什么这不起作用?跳过速记并使用$array = $array + array('Item 2')
也不起作用。它与按键有关吗?
Answers:
两者都有一个键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/zh/function.array-merge.php
将一个或多个数组的元素合并在一起,以便将一个数组的值附加到上一个数组的末尾。它返回结果数组。
IMO先前的某些答案不正确!(可以对答案进行排序,从最早的到最新的)。
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);
?>
array_merge
如果它们是具有相同键的关联数组,则只会从结果数组中省略它们。对于数字数组,所有项目都合并到一个新数组中,该数组的长度是原始数组的精确总和。在该示例中,您正在使用数值数组,这意味着array_merge
将为您完美地工作。我同意array_merge
不应将其用于关联数组,但是显然,这不是您在此处显示的内容。
+
除非密钥不同,否则在任何一种情况下(关联或不关联)都不应使用接受的答案。和array_merge在相同项目的情况下将包含重复项目。
+
称为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[] = array('Item 2');
尽管看起来您正在尝试将一个数组添加到一个数组中,$array[][]
但这并不是您的标题所暗示的。
array('Item 1', array('Item 2'))
一个多维数组。