Слияние массивов в PHP

Слияние (конкатенация) — это операция создания массива, состоящего из элементов нескольких других массивов. Слияние массивов — это очень опасная операция, поэтому старайтесь избегать ее. Результат слияния подчиняется своей логике, забыв о которой можно потерять данные. В PHP слияние реализуется при помощи оператора +.

Итак, пусть у нас есть два массива:

$A = array («1″=>»первый»,»2″=>»второй»);

$B = array («3″=>»третий»,»4″=>»четвертый»);

Теперь, давайте сольем эти два массива в один массив $C:

$C = $A + $B;

Сразу нужно сказать, что оператор «+» для массивов не коммутативен, а это значит, что $A + $B не равно $B + $A. В результате слияния $A + $B мы получим:

«1»=>»первый», «2»=>»второй», «3»=>»третий», «4»=>»четвертый»

// именно в таком порядке

А в результате $B + $A, получим такой массив:

«3»=>»третий», «4»=>»четвертый», «1»=>»первый», «2»=>»второй»

Особенно внимательным нужно быть при слиянии списков. Предположим, у нас опять есть два массива:

$A = array (10,11,12); $B = array (15,17,18);

В результате слияния $C = $A + $B мы получим следующий массив:

10, 11, 12

Неожиданный результат, не правда ли. Скорее всего вы ожидали получить массив array (10, 11, 12, 15, 17, 18). Однако в PHP на этот счет свои правила. При слиянии массивов, в которых содержатся элементы с одинаковыми индексами (ключами), в результирующем массиве останется элемент первого массива, причем на том же самом месте. А в приведенном примере элементы массива $A имели индексы 1, 2, 3 и элементы массива $B имели индексы 1, 2, 3. А поскольку массив $A при сложении стоит первым, то его элементы и являются результирующими. Можете убедиться в этом еще раз следующим образом:

$A = array (10, 11, 12);

$B = array (15, 17, 18);

$A = $A + $B; // или $A += $B;

В этом примере элементы массива $A не изменятся. Изменить элементы массива можно только при помощи прямого перебора.

Слияние с помощью функции array_merge()

Функция array_merge() предназначена для слияния двух массивов. Причем при слиянии массивов эта функция устраняет все недостатки оператора +. Она соединяет массивы, переданные ей в качестве аргументов, в один большой массив. Если в соединяемых массивах встречаются одинаковые ключи (ключ => значение), то в результирующий массив помещается пара ключ => значение из массива, который стоит правее в списке аргументов функции array_merge(). Однако это правило не затрагивает списки, то есть массивы с числовыми индексами. В этом случае элементы с повторяющимся числовым индексом помещаются в конец результирующего массива в любом случае.

Проиллюстрируем сказанное примером:

$A = array (10, 11, 12);

$B = array (15, 17, 18);

$C = $A + $B; // $C = array (10, 11, 12);

$C = array_merge ($A, $B); // $C = array (10, 11, 12, 15, 17, 18);

Таким образом, функцию array_merge() очень удобно использовать для слияния списков.