Недавно я узнал, как присоединиться к 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;