Функция cot_arrayMergeRecursive в Cotonti
Разбор функции cot_arrayMergeRecursive
Функция cot_arrayMergeRecursive реализует слияние двух массивов, но с некоторыми отличиями от стандартной функции PHP array_merge_recursive. Она выполняет слияние массивов, заменяя значения элементов с одинаковыми ключами в первом массиве значениями из второго массива, в отличие от стандартной функции array_merge_recursive, которая преобразует дублирующиеся значения в массивы.
Код функции
/**
* Native php function array_merge_recursive() does indeed merge arrays, but it converts values with duplicate
* keys to arrays rather than overwriting the value in the first array with the duplicate value in the second array,
* as array_merge() does.
*
* @param array $array1
* @param array $array2
* @return array
*
* @see array_merge()
* @see array_merge_recursive()
* @see https://www.php.net/manual/en/function.array-merge-recursive.php
* @see https://www.php.net/manual/en/function.array-merge.php
*/
function cot_arrayMergeRecursive(array &$array1, array &$array2)
{
$merged = $array1;
foreach ($array2 as $key => &$value) {
if (is_array($value) && isset($merged[$key]) && is_array($merged[$key])) {
$merged [$key] = cot_arrayMergeRecursive($merged[$key], $value);
} else {
$merged[$key] = $value;
}
}
return $merged;
}
Описание:
cot_arrayMergeRecursive(array &$array1, array &$array2)
Параметры:
$array1 (array) — первый массив, который будет изменен в процессе слияния.$array2 (array) — второй массив, элементы которого будут добавлены или заменены в первом массиве.
Логика работы:
Создание нового массива для хранения результатов:
$merged = $array1; — создается копия первого массива, в которую будут добавляться элементы из второго массива.
Перебор элементов второго массива ($array2):
foreach ($array2 as $key => &$value) — каждый элемент второго массива перебирается в цикле. Переменная $key — это ключ элемента, а $value — его значение.
Рекурсивная обработка вложенных массивов:
if (is_array($value) && isset($merged[$key]) && is_array($merged[$key]))
— если текущее значение из второго массива является массивом, и в первом массиве по тому же ключу также есть массив, то вызывается рекурсивная функция cot_arrayMergeRecursive для слияния этих двух вложенных массивов:
$merged[$key] = cot_arrayMergeRecursive($merged[$key], $value);
Заменить или добавить значение в первый массив:
Если значение из второго массива не является массивом, оно просто заменяет или добавляется в первый массив:
$merged[$key] = $value;
Возврат результата:
Функция возвращает обновленный массив $merged, который содержит элементы как из первого массива, так и из второго, с соответствующими заменами.
if ($cache && $cot_cfg) {
$cfg = cot_arrayMergeRecursive($cot_cfg, $cfg);
}
Пример работы функции:
$array1 = [
'a' => 1,
'b' => [2, 3],
'c' => 4
];
$array2 = [
'b' => [5, 6],
'c' => 7,
'd' => 8
];
$result = cot_arrayMergeRecursive($array1, $array2);
print_r($result);
Результат:
Array
(
[a] => 1
[b] => Array
(
[0] => 5
[1] => 6
)
[c] => 7
[d] => 8
)
Объяснение:
Ключ 'b': вместо того, чтобы превращать значение в массив (как это делает array_merge_recursive), функция просто заменяет значения на новые.
Ключ 'c': значение из второго массива (7) заменяет значение из первого массива (4).
Ключ 'd': элемент добавляется в результат, так как его нет в первом массиве.
Сравнение с array_merge_recursive:
В array_merge_recursive для ключа 'b', если оба массива содержат массивы по этому ключу, результат будет:
[b] => Array
(
[0] => 2
[1] => 3
[2] => 5
[3] => 6
)
В отличие от этого, cot_arrayMergeRecursive просто заменяет значения массивов по этому ключу, если ключ уже существует в обоих массивах.
Резюме:
Функция cot_arrayMergeRecursive сливает два массива, заменяя значения с одинаковыми ключами из первого массива значениями из второго, и рекурсивно обрабатывает вложенные массивы.
Это более "жесткий" подход к слиянию массивов, чем в стандартной функции array_merge_recursive, которая оставляет значения с одинаковыми ключами в виде объединенных массивов.
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 21.01.2025 12:08
- Последнее обновление: 21.01.2025 12:21