Метод undot
Метод undot класса Arr преобразует плоский массив, в котором ключи содержат точки для обозначения вложенности, обратно в многомерный массив. Первым параметром передаётся исходный плоский массив, вторым параметром можно указать разделитель (по умолчанию используется точка). Метод возвращает новый многомерный массив.
Синтаксис
<?php
use Illuminate\Support\Arr;
$res = Arr::undot($array);
?>
Пример
Давайте преобразуем плоский массив с точечными ключами обратно в многомерный:
<?php
use Illuminate\Support\Arr;
$array = [
'name' => 'John',
'age' => 25,
'address.city' => 'New York',
'address.street' => 'Main St',
'address.zip' => 10001
];
$res = Arr::undot($array);
print_r($res);
?>
Результат выполнения кода:
Array
(
[name] => John
[age] => 25
[address] => Array
(
[city] => New York
[street] => Main St
[zip] => 10001
)
)
Пример
Давайте используем кастомный разделитель вместо точки:
<?php
use Illuminate\Support\Arr;
$array = [
'user-name' => 'John',
'user-age' => 25,
'user-address-city' => 'New York'
];
$res = Arr::undot($array, '-');
print_r($res);
?>
Результат выполнения кода:
Array
(
[user] => Array
(
[name] => John
[age] => 25
[address] => Array
(
[city] => New York
)
)
)
Пример
Давайте преобразуем массив с несколькими уровнями вложенности:
<?php
use Illuminate\Support\Arr;
$array = [
'user.profile.name' => 'John',
'user.profile.age' => 25,
'user.settings.theme' => 'dark',
'user.settings.language' => 'en'
];
$res = Arr::undot($array);
print_r($res);
?>
Результат выполнения кода:
Array
(
[user] => Array
(
[profile] => Array
(
[name] => John
[age] => 25
)
[settings] => Array
(
[theme] => dark
[language] => en
)
)
)
Пример
Давайте используем метод undot для создания структуры с числовыми ключами:
<?php
use Illuminate\Support\Arr;
$array = [
'categories.0.name' => 'Technology',
'categories.0.id' => 1,
'categories.1.name' => 'Science',
'categories.1.id' => 2
];
$res = Arr::undot($array);
print_r($res);
?>
Результат выполнения кода:
Array
(
[categories] => Array
(
[0] => Array
(
[name] => Technology
[id] => 1
)
[1] => Array
(
[name] => Science
[id] => 2
)
)
)