8

我最近经常看到以下内容,我想知道它的作用是什么?我似乎无法在 PHP 手册中找到它。

 $arr1 = array('key' => 'value1');
 $arr2 = array('key' => 'value2');
 $arr1 += $arr2;

它类似于array_merge吗?

我知道以下内容是做什么的,但我不明白使用数组时它会做什么:

 $var1 = 1;
 $var2 = 2;
 $var1 += $var2;
 echo $var1; // 3
4

4 回答 4

14

$arr1 += $arr2是 的缩写$arr1 = $arr1 + $arr2

+数组运算符执行以下操作:

  • 创建一个新数组,其中包含 和 的所有元素$arr1$arr2但下一个条件除外。
  • 如果两个操作数的元素具有相同的key,则只有元素 of$arr1会出现。
  • 的元素$arr2将在 的元素之后$arr1

这与 不同array_merge,后者:

  • 创建一个新数组,其中包含 和 的所有元素$arr1$arr2但下一个条件除外。
  • 如果两个操作数的元素具有相同的字符串 key,则只有元素 of$arr2会出现。
  • 带有数字键的元素将从 0 开始重新编号,从 的元素开始$arr1,然后移动到 的元素$arr2
  • 的元素$arr2将在 的元素之后$arr1,但字符串元素除外,它们将位于它们出现的第一个数组的位置。

例子:

<?php
$arr1 = array(1 => 'value1.1', 10 => 'value1.2', 's' => 'value1.s');
$arr2 = array(1 => 'value2', 2=> 'value2.2', 's' => 'value2.s');
var_dump(array_merge($arr1,$arr2));
$arr1 += $arr2;
var_dump($arr1);

结果(为清楚起见进行了编辑):

数组(5){
  [0] => 字符串(8)“value1.1”
  [1] => 字符串(8)“value1.2”
  ["s"] => 字符串(8) "value2.s"
  [2] => 字符串(6)“值 2”
  [3] => 字符串(8)“value2.2”
}
数组(4){
  [1] => 字符串(8)“value1.1”
  [10] => 字符串(8)“value1.2”
  ["s"] => 字符串(8) "value1.s"
  [2] => 字符串(8)“value2.2”
}
于 2010-08-23T03:45:58.580 回答
3

PHP 中的+运算符在应用于数组时完成了数组UNION的工作。

$arr += array $arr1;

有效地找到 和 的并集$arr并将$arr1结果分配给$arr.

于 2010-08-23T03:27:53.480 回答
2

两个数组之间的+操作就像一个 UNION。

于 2010-08-23T03:30:33.853 回答
2

和两个数组之和之间的区别array_merge()之一在以下片段中很明显。(另见https://3v4l.org/TcNBF。)

$array1 = array();
$array2 = array(1 => "data");
$result = array_merge($array1, $array2);

中的索引$result将为 0。

$array1 = array();
$array2 = array(1 => "data");
$result = $array1 + $array2;

索引不变;指数仍为 1。

于 2010-08-23T03:34:26.857 回答