Не удается объединить 2 массива в PHP

Недавно я узнал, как присоединиться к 2 массивам, используя оператор + в PHP.

Но рассмотрим этот код …

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

Выход

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

Почему это не работает? Пропуск сокращения и использование $array = $array + array('Item 2') тоже не работает. Это связано с ключами?

Оба будут иметь ключ 0 , и этот метод объединения массивов приведет к срыву дубликатов. array_merge() этого попробуйте использовать 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/en/function.array-merge.php

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

+ называется оператором 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 .

Все предыдущие ответы неверны! 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.

 $array1 = array('Item 1'); $array2 = array('Item 2'); $array3 = array_merge($array1, $array2); 

Я думаю, это потому, что вы не назначаете ключ ни к одному, поэтому оба они имеют ключ 0, а + не переиндексируют, поэтому он пытается его записать.

 $array = array('Item 1'); array_push($array,'Item 2'); 

или

 $array[] = 'Item 2'; 

Это действительно ключевой конфликт. При конкатенации массивов дублирующиеся ключи не перезаписываются.

Вместо этого вы должны использовать array_merge()

 $array = array_merge(array('Item 1'), array('Item 2')); 

Попробуйте сказать

 $array[] = array('Item 2'); 

Хотя похоже, что вы пытаетесь добавить массив в массив, таким образом, $array[][] но это не то, что предлагает ваш заголовок.

вы можете использовать оператора. $ array3 = $ array1. $ array2;