+ оператор для массива в PHP? - PullRequest
181 голосов
/ 26 января 2010
$test = array('hi');
$test += array('test','oh');
var_dump($test);

Что означает + для массива в PHP?

Ответы [ 8 ]

254 голосов
/ 26 января 2010

Цитирование из Руководства PHP по языковым операторам

Оператор + возвращает правый массив, добавленный к левому массиву; для ключей, которые существуют в обоих массивах, будут использоваться элементы из левого массива, а соответствующие элементы из правого массива будут игнорироваться.

Так что, если вы делаете

$array1 = ['one',   'two',          'foo' => 'bar'];
$array2 = ['three', 'four', 'five', 'foo' => 'baz']; 

print_r($array1 + $array2);

Вы получите

Array
(
    [0] => one   // preserved from $array1 (left-hand array)
    [1] => two   // preserved from $array1 (left-hand array)
    [foo] => bar // preserved from $array1 (left-hand array)
    [2] => five  // added from $array2 (right-hand array)
)

Таким образом, логика + эквивалентна следующему фрагменту:

$union = $array1;

foreach ($array2 as $key => $value) {
    if (false === array_key_exists($key, $union)) {
        $union[$key] = $value;
    }
}

Если вас интересуют подробности реализации на уровне C, обратитесь к


Обратите внимание, что + отличается от того, как array_merge() будет объединять массивы:

print_r(array_merge($array1, $array2));

даст вам

Array
(
    [0] => one   // preserved from $array1
    [1] => two   // preserved from $array1
    [foo] => baz // overwritten from $array2
    [2] => three // appended from $array2
    [3] => four  // appended from $array2
    [4] => five  // appended from $array2
)

См. Связанные страницы для дополнительных примеров.

15 голосов
/ 16 ноября 2010

Лучший пример, который я нашел для использования этого, находится в массиве конфигурации.

$user_vars = array("username"=>"John Doe");
$default_vars = array("username"=>"Unknown", "email"=>"no-reply@domain.com");

$config = $user_vars + $default_vars;

$default_vars, как предполагается, является массивом значений по умолчанию. Массив $user_vars заменит значения, определенные в $default_vars. Любые пропущенные значения в $user_vars теперь являются значениями по умолчанию от $default_vars.

Это будет print_r как:

Array(2){
    "username" => "John Doe",
    "email" => "no-reply@domain.com"
}

Надеюсь, это поможет!

6 голосов
/ 26 января 2010

Этот оператор принимает объединение двух массивов (так же, как array_merge, за исключением того, что с array_merge дублирующиеся ключи перезаписываются).

Документация для операторов массива найдена здесь .

5 голосов
/ 31 мая 2013

Осторожно с цифровыми клавишами, если они должны быть сохранены или если вы не хотите ничего терять

$a = array(2 => "a2", 4 => "a4", 5 => "a5");
$b = array(1 => "b1", 3 => "b3", 4 => "b4");

союз

print_r($a+$b);
Array
(
    [2] => a2
    [4] => a4
    [5] => a5
    [1] => b1
    [3] => b3
)

1007 * слияние *

print_r(array_merge($a, $b));
Array
(
    [0] => a2
    [1] => a4
    [2] => a5
    [3] => b1
    [4] => b3
    [5] => b4
)
3 голосов
/ 30 января 2014

Оператор + выдает те же результаты, что и array_replace () . Однако поскольку аргументы оператора обращены, порядок результирующего массива также может быть другим.

Расширение на другой пример с этой страницы:

$array1 = array('one', 'two', 'foo' => 'bar');
$array2 = array('three', 'four', 'five', 'foo' => 'baz'); 

print_r($array1 + $array2);
print_r(array_replace($array2, $array1)); //note reversed argument order

выходы:

Array
(
    [0] => one   // preserved from $array1
    [1] => two   // preserved from $array1
    [foo] => bar // preserved from $array1
    [2] => five  // added from $array2
)
Array
(
    [0] => one   // preserved from $array1
    [1] => two   // preserved from $array1
    [2] => five  // added from $array2
    [foo] => bar // preserved from $array1
)
0 голосов
/ 31 декабря 2014
  1. Операция Array plus обрабатывает весь массив как ассоциированный массив.
  2. Когда конфликт клавиш во время плюса, левое (предыдущее) значение будет сохранено

Я выкладываю код ниже, чтобы прояснить ситуацию.

$a + $b = array_plus($a, $b)

function array_plus($a, $b){
    $results = array();
    foreach($a as $k=>$v) if(!isset($results[$k]))$results[$k] = $v;
    foreach($b as $k=>$v) if(!isset($results[$k]))$results[$k] = $v;
    return $results;
}
0 голосов
/ 03 декабря 2011
$var1 = "example";
$var2 = "test";
$output = array_merge((array)$var1,(array)$var2);
print_r($output);

Array ([0] => пример [1] => test)

0 голосов
/ 26 января 2010

Добавит новый массив к предыдущему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...