Подтвердить что ты не робот

PHP: добавление массивов вместе

Может ли кто-нибудь помочь мне объяснить это? У меня есть два фрагмента кода, один работает, как я ожидаю, а другой нет.

Это работает

$a = array('a' => 1, 'b' => 2);
$b = array('c' => 3);
$c = $a + $b;
print_r($c);

// Output
Array
(
    [a] => 1
    [b] => 2
    [c] => 3
)

Это не

$a = array('a', 'b');
$b = array('c');
$c = $a + $b;
print_r($c);

// Output
Array
(
    [0] => a
    [1] => b
)

Что здесь происходит? Почему вторая версия не объединяет два массива? Что я неправильно понял? Что я должен делать вместо этого? Или это ошибка в PHP?

4b9b3361

Ответ 1

Это документировано и правильно: http://us3.php.net/manual/en/language.operators.array.php

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

Итак, я думаю, это не ошибка в php, и что, возможно, произойдет. Я тоже этого не заметил.

Ответ 2

Чтобы добавить два неассоциативных массива, вам необходимо использовать функцию array_merge:

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

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

Если задан только один массив, и массив численно индексируется, ключи получать повторно проиндексированные в непрерывном режиме.

Ответ 3

чтобы быть коротким, это работает, потому что если вы печатаете_r и $a и $b, вы имеете:

Array
(
    [a] => 1
    [b] => 2
)

и

Array
(
    [c] => 3
)

поскольку вы можете видеть, что все элементы имеют разные ключи...

как для второго массива примеров, если вы печатаете $a и $b, вы имеете:

Array
(
    [0] => a
    [1] => b
)

и

Array
(
    [0] => c
)

и что ключ 0 для "a" и "c" является проблемой здесь, элементы второго массива с одинаковыми ключами отбрасываются... если вы выполните:

$c = $b + $a; // instead of $c = $a + $b;

результат будет:

Array
(
    [0] => c
    [1] => b
)

Ответ 4

Я думаю, что это просто недокументированное поведение, но я, вероятно, ошибаюсь. В любом случае, если вы пытаетесь объединить массивы, используйте array_merge

Смотрите: http://ca2.php.net/manual/en/function.array-merge.php

Ответ 5

При работе с массивами оператор плюс не перезаписывает индексы и не переиндексирует массивы. В вашем примере c имеет индекс 0 так же, как a, поэтому он отбрасывается. Используйте array_merge.

Ответ 6

array_splice($a,count($a),0,$b); //array $a becomes a group of $a and $b arrays.

P.S. это для индексированных массивов (не ассоциативных)