Не может связать 2 массива в PHP

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

Но рассмотрите этот код...

$array = array('Item 1');

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

var_dump($array);

Вывод

массив (1) {[0] => строка (6) "Объект 1"}

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

55
задан alex 24 June 2012 в 07:54
поделиться

7 ответов

Оба будут иметь ключ 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;

Редактировать: Добавлен фрагмент кода, чтобы прояснить

119
ответ дан 26 November 2019 в 17:45
поделиться

Используйте array_merge ()
См. Документацию здесь:
http://php.net/manual/en/function.array-merge.php

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

8
ответ дан 26 November 2019 в 17:45
поделиться

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

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

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

-3
ответ дан 26 November 2019 в 17:45
поделиться

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

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

$array = array_merge(array('Item 1'), array('Item 2'));
2
ответ дан 26 November 2019 в 17:45
поделиться

Попробуйте array_merge.

$array1 = array('Item 1');

$array2 = array('Item 2');

$array3 = array_merge($array1, $array2);

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

3
ответ дан 26 November 2019 в 17:45
поделиться

+ называется оператором объединения, который отличается от оператора конкатенации (в 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 .

6
ответ дан 26 November 2019 в 17:45
поделиться
$array = array('Item 1');

array_push($array,'Item 2');

или

$array[] = 'Item 2';
2
ответ дан 26 November 2019 в 17:45
поделиться