Не удается объединить 2 массива в PHP
Недавно я узнал, как присоединиться к 2 массивам, используя оператор + в PHP.
Но рассмотрим этот код...
$array = array('Item 1');
$array += array('Item 2');
var_dump($array);
Выход
массив (1) {[0] = > строка (6) "Пункт 1" }
Почему это не работает? Пропуск сокращений и использование $array = $array + array('Item 2')
тоже не работает. Связано ли это с ключами?
Ответы
Ответ 1
Оба будут иметь ключ 0
, и этот метод объединения массивов приведет к срыву дубликатов. Вместо этого используйте 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;
Изменить: добавлен фрагмент кода для уточнения
Ответ 2
Использовать array_merge()
Смотрите документацию здесь:
http://php.net/manual/en/function.array-merge.php
Объединяет элементы одного или нескольких массивов вместе так, чтобы значения одного добавлялись к концу предыдущего. Он возвращает результирующий массив.
Ответ 3
+
называется оператором 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
.
Ответ 4
Все предыдущие ответы неверны!
merge фактически объединяет массивы, то есть если массивы имеют общий элемент, одна из копий будет опущена. То же самое происходит для union.
Я не нашел "обход" для этой проблемы, но на самом деле это вручную...
вот он:
<?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);
?>
Ответ 5
Попробуйте array_merge.
$array1 = array('Item 1');
$array2 = array('Item 2');
$array3 = array_merge($array1, $array2);
Я думаю, что это потому, что вы не назначаете ключ ни одному из них, поэтому оба они имеют ключ 0, а + не переиндексируют, поэтому он пытается записать его.
Ответ 6
$array = array('Item 1');
array_push($array,'Item 2');
или
$array[] = 'Item 2';
Ответ 7
Это действительно ключевой конфликт. При конкатенации массивов дублирующиеся ключи не перезаписываются.
Вместо этого вы должны использовать array_merge()
$array = array_merge(array('Item 1'), array('Item 2'));
Ответ 8
Попробуйте сказать
$array[] = array('Item 2');
Хотя похоже, что вы пытаетесь добавить массив в массив, таким образом $array[][]
, но это не то, что предлагает ваш заголовок.
Ответ 9
вы можете использовать оператор.
$ array3 = $array1. $array2;