Разработчику. Сборник рецептов PHP
Задавайте вопросы

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

Вернуться назад

Задача

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

Решение

Используйте функцию 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.

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

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования


Рейтинг Сайтов ДОСКИ.РУ