Что делает массив $ arr + = array $ arr1? - PullRequest
3 голосов
/ 23 августа 2010

В последнее время я часто видел следующее, и мне интересно, что он делает? Я не могу найти его в руководстве по PHP.

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

Это похоже на array_merge ?

Я знаю, что делает следующее, но я не понимаю, что он делает при работе с массивом:

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

Ответы [ 4 ]

8 голосов
/ 23 августа 2010

$arr1 += $arr2 - это сокращение от $arr1 = $arr1 + $arr2.

Оператор массива + выполняет следующие действия:

  • Создает новый массив, содержащий все элементы $arr1 и $arr2, за исключением следующего условия.
  • Если оба операнда имеют элементы с одинаковой клавишей , будет присутствовать только элемент $arr1.
  • Элементы $arr2 будут после элементов $arr1.

Это отличается от array_merge, что:

  • Создает новый массив, который содержит все элементы $arr1 и $arr2, за исключением следующего условия.
  • Если оба операнда имеют элементы с одинаковым строковым ключом , только элемент$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);

Результат (отредактировано для ясности):

array(5) {
  [0]   => string(8) "value1.1"
  [1]   => string(8) "value1.2"
  ["s"] => string(8) "value2.s"
  [2]   => string(6) "value2"
  [3]   => string(8) "value2.2"
}
array(4) {
  [1]   => string(8) "value1.1"
  [10]  => string(8) "value1.2"
  ["s"] => string(8) "value1.s"
  [2]   => string(8) "value2.2"
}
3 голосов
/ 23 августа 2010

Оператор + в PHP применительно к массивам выполняет работу с массивом UNION .

$arr += array $arr1;

эффективно находит объединение $arr и $arr1 и присваивает результат $arr.

2 голосов
/ 23 августа 2010

Операция + между двумя массивами действует как UNION.

1 голос
/ 23 августа 2010

Разница между array_merge() и суммой двух массивов очевидна в следующих примерах:

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

$result будет содержать массив с индексом 0.

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

Индекс не изменился.

...