Добавление одного массива к другому

Задача
Необходимо объединить два массива в один.

Решение
Используйте функцию array_merge():

$garden = array_merge($fruits, $vegetables);

Обсуждение
Функция array_merge() работает и с заранее определенными массивами
и с массивами, определенными на месте с помощью функции array():

$p_languages = array('Perl', 'PHP');
$p_languages = array_merge($p_languages, array('Python'));
print_r($p_languages);
Array
(
[0] => PHP
[1] => Perl
[2] => Python
)

Соответственно, соединенными массивами могут стать или существующие массивы, как в случае с $p_languages, или безымянные массивы, как в случае с array('Python').

Нельзя использовать функцию array_push(), поскольку PHP не будет автоматически раскладывать массив в последовательность независимых переменных, и в результате получится вложенный массив. Так:

array_push($p_languages, array('Python'));
print_r($p_languages);
Array
(
[0] => PHP
[1] => Perl
[2] => Array
(
[0] => Python
)
)

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


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

$lc = array('a', 'b' => 'b'); // буквы в нижнем регистре в качестве значений
$uc = array('A', 'b' => 'B'); // буквы в верхнем регистре в качестве значений
$ac = array_merge($lc, $uc); // все регистры?
print_r($ac);
Array
(
[0] => a
[b] => B
[1] => A
)

Буква «A» в верхнем регистре поменяла свой индекс с 0 на 1, чтобы избежать коллизий, и добавилась в конец. Буква «B» в верхнем регистре переписала букву «b» и встала на ее исходное место внутри массива.

С помощью оператора + также можно соединять массивы. Массив с правой стороны переписывает любой аналогично названный ключ, найденный в массиве слева. Не делается никакого переупорядочения для предотвращения коллизий. Используем предыдущий пример:

print_r($a + $b);
print_r($b + $a);
Array
(
[0] => a
[b] => b
)
Array
(
[0] => A
[b] => B
)

Так как a и A обе имеют ключ 0, а b и B обе имеют ключ b, то в результате в объединенном массиве будут только два элемента.

В первом случае $a + $b превращается только в $b, а в другом случае $b + $a становится $a.

Однако если бы оба массивы были снабжены очевидными ключами, то проблемы бы не было, и новый массив был бы объединением двух массивов..



Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Изменение длины массива
Инициализация массива диапазоном
Инициализация массива диапазоном целых чисел
Нахождение всех перестановок массива
Нахождение элемента массива с наибольшим или наименьшим значением

Вернуться в раздел: PHP / 4. Массивы