Функция array_merge_recursive в PHP
Давайте поговорим о такой интересной функции как array_merge_recursive и пообсуждаем что же она делает
Если поднять вопрос об интересных и не совсем сходу понятных функциях, то я бы назвал array_merge_recursive.
На первый взгляд кажется что функция соединяет вроде бы как многомерные массивы, ведь для обычных уже есть array_merge или оператор + или оператор spread(...).
Но если вы хотите все же соединить два многомерных массива в PHP, вы все равно должны использовать array_merge, а не array_merge_recursive. Почему?
Давайте сначала поймем, что array_merge_recursive делает, например, возьмем эти два массива:
$first = [
'key' => 'какое-то значение'
];
$second = [
'key' => 'другое значение'
];
array_merge_recursive($first, $second);
// [
// 'key' => [
// 'какое-то значение',
// 'другое значение',
// ],
// ]
Вместо того, чтобы переопределить исходное значение под ключом key как это бы сделал array_merge и (...) или пропустил бы (+) - array_merge_recursive создал массив с исходным и новым значением в нем.
Хотя в этом простом примере это выглядит странно, на самом деле это более полезно в тех случаях, когда одно из значений уже является массивом, и вы хотите объединить другой элемент в этом массиве, а не переопределять его:
$first = [
'key' => ['какое-то значение']
];
$second = [
'key' => 'другое значение'
];
В этом случае array_merge_recursive возьмет значение из $second массива и добавляет его к значению в $first массиве, который сам уже был массивом:
array_merge_recursive($first, $second);
// [
// 'key' => [
// 'какое-то значение',
// 'другое значение',
// ],
// ]
Самое важное, что ключ должен иметь одинаковые строковые ключи, если массивы имеют одинаковые числовые ключи, каждое последующее значение не заменит исходное значение, а будет добавлено в конец массива. Рассмотрим более сложный пример:
$first = [
42,
'color' => ['green', 'red', 'blue']
];
$second = [
42,
'color' => 'black'
];
$third = [
42,
'color' => [
'black' => 1
]
];
$fourth = [
'color' => [
'black' => [2,3,4]
],
42
];
array_merge_recursive($first, $second, $third, $fourth);
//Array
//(
// [0] => 42
// [color] => Array
// (
// [0] => green
// [1] => red
// [2] => blue
// [3] => black
// [black] => Array
// (
// [0] => 1
// [1] => 2
// [2] => 3
// [3] => 4
// )
//
// )
//
// [1] => 42
// [2] => 42
// [3] => 42
//)
Как можно заметить значения 42 просто добавляется в массив каждый раз, как встречается, ключ color объединил значения цветов, а black так же рекурсивно собрал все значения.
А какие функции в PHP вы бы назвали интересными?
cddolordff
Dkyshka06.03.2023
Не, ну сайт просто Богоподобен, спасибо, столько инфы годной! Про дизайн вообще слов не подобрать. Развития Вам!