PHP 1553 ~ 1 мин.

Функция array_merge_recursive в PHP

Функция 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

Не, ну сайт просто Богоподобен, спасибо, столько инфы годной! Про дизайн вообще слов не подобрать. Развития Вам!

Категории
  • PHP 65
  • Заметки 15
  • Безопасность 3
  • Флуд 2
  • Nginx 2
  • ИТ новости 2
  • Видео 1
  • Docker 1
  • Roadmap 1
  • Архитектура 0

Хочешь поддержать сайт?

Делаем из мухи слона

sergeymukhin.com

персональный блог о веб-разработке от Сергея Мухина. Блог был основан в 2018 году, и собирался уделять основное внимание последним тенденциям, учебным пособиям, а также советам и рекомендациям, позволяющим начинающим девелоперам встать быстрее на правильную дорогу веб разработки, но что-то пошло не так 😃

Релизы PHP 8.4

Дата Релиз
8 Июня 2024 Альфа 1
20 Июня 2024 Альфа 2
04 Июля 2024 Альфа 3
16 Июля 2024 Feature freeze
18 Июля 2024 Бета 1
01 Августа 2024 Бета 2
15 Августа 2024 Бета 3
29 Августа 2024 RC 1
12 Сентября 2024 RC 2
26 Сентября 2024 RC 3
10 Октября 2024 RC 4
24 Октября 2024 RC 5
07 Ноября 2024 RC 6
21 Ноября 2024 GA

Что нового?