Слияние (конкатенация) — это операция создания массива, состоящего из элементов нескольких других массивов. Слияние массивов — это очень опасная операция, поэтому старайтесь избегать ее. Результат слияния подчиняется своей логике, забыв о которой можно потерять данные. В 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() очень удобно использовать для слияния списков.