20.5. Функции объединения
Данные функции необходимы для того, чтобы можно было объединять несколько массивов в один и производить дальнейшую работу с полученным массивом. Рассмотрим две функции: array_merge() и array_merge_recursive().
Функция array_merge() очень проста в использовании. Ее синтаксис:
array array_merge (array array1, array array2 [, array...])
Данная функция используется в PHP 4. Если при вызове array_merge() у вас возникнут ошибки, непременно проверьте версию вашего интерпретатора. Функция вызывает массив значений, состоящий из элементов значений массивов array1, array2... Последовательность сортировки будет следующая: сначала будут следовать значения первого массива, далее второго и т. т. е. значения каждого последующего массива переходят в конец предыдущего. Это очень важно запомнить, так как иногда из-за непонимания этого возникают ошибки работы с данной функцией.
ПРИМЕЧАНИЕ
Если в массивах встречаются одинаковые значения, то сортировка происходит по тем же правилам, за исключением того, что одинаковое значение (например, указатель) будет использовано из предыдущего массива.
Приведенный пример поможет вам освоить принцип работы данной функции:
<?
$arrayl = array( "color" => "красный", 1.2, 1.4);
$array2 = array( "a", "b", "color" => "синий", "shape" => "круглый", 2.4);
$array3 = array( 3.2, 3.5, "color" =>"зеленый", 3.8); $array4 = array_merge($array1, $array2, $array3);
print_r($array4);
?>
Как видно из данного примера, все массивы имеют одинаковое имя указателя, хотя значения разные. В этом случае будет вставлен тот указатель, который находится в последнем массиве (в нашем случае "color" Результат работы данной программы:
Array ([color] => зеленый [0] => 1.2 [1] => 1.4 [2] => а [3] => b [shape] => круглый [4] => 2.4 [5] => 3.2 [6] => 3.5 [7] => 3.8)
Обратите внимание на последовательность значений: сначала идут все значения из массива Sarray1, затем $array2, и т. д. В общем весь процесс подчиняется строгому логическому порядку, помнить о котором ваша задача.
Теперь рассмотрим функцию array_merge_recursive(). Принцип ее работы полностью аналогичен вышеописанной функции array_merge(). Единственное отличие состоит в том, что функция array_merge() просто производит объединение массивов, a array_merge_recursive() производит объединение массивов рекурсивно. Синтаксис данной функции следующий:
array array_merge_recursive (array array1, array array2 [, array...])
Она также возвращает массив значений. Применяется непосредственно в РНР старше 4-й версии. Все тонкости, которые касались работы функции array_merge(), относятся также и к этой функции.
Приведем пример:
<?
$arrray1 = array("color" => array("favorite" => "красный"), 1.5);
$arrray2 = array(2.10, "color" => array ("favorite" => "зеленый", "синий"), 2.15 );
$result = array_merge_recursive($arrray1, $array2);
print_r($result);
?>
Результатом работы данной программы будет массив, содержащий следующие значения:
array ("color" => array("favorite" => array("красный", "зеленый"), "синий"), 1.5, 2.10, 2.15);
Обратите внимание, как произошла обработка данных. Был создан массив array("красный", "зеленый"), "синий"), при этом не произошло никакого удаления первого значения массива, а произошло последовательное подчинение значений в массиве. Если изменить ранее описанный пример, то программа будет работать
следующим образом:
<?
$array1 = array( "color" => "красный", 1.2, 1.4);
$array2 = array("a", "b", "color" => "синий", "shape" => "круглый", 2.4);
$array3 = array( 3.2, 3.5, "color" =>"зеленый", 3.8); $array4 = array_merge_recursive($array1, $array2, $array3);
print_r($array4);
?>
Результат программы:
array ([color] => array ([0] => красный [1] => синий [2] => зеленый) [0] => 1.2 [1] => 1.4 [2] => а [3] => b [shape] => круглая [4] => 2.4 [5] => 3.2 [6] => 3.5 [7] => 3.8)
Из этой труднопонимаемой на первый взгляд строки можно сделать вывод и привести отличия array_merge() и array_merge_recursive(). Последняя вместо того чтобы заменять производит создание отдельного массива, подчиненного тому или иному указателю, встречающемуся повторно, и при этом сами значения формируются в последовательном порядке. А у функции array_merge() немного не такой принцип, т. е. она производит замену имеющегося значения указателя на встреченное ниже при условии, конечно, что указатели имеют одинаковое имя. Выбирать, какой функцией лучше пользоваться, нужно с учетом задачи, стоящей перед программистом. Думаем, что с этим вы справитесь без