<?php
$arr = array (
0 =>
array (
'id' => 1,
'name' => 'Пользователи',
'alias' => 'users',
'childrens' =>
array (
0 =>
array (
'id' => 2,
'name' => 'Создание',
'alias' => 'create',
),
1 =>
array (
'id' => 3,
'name' => 'Список',
'alias' => 'list',
'childrens' =>
array (
0 =>
array (
'id' => 4,
'name' => 'Активные',
'alias' => 'active',
),
1 =>
array (
'id' => 5,
'name' => 'Удаленные',
'alias' => 'deleted',
),
),
),
2 =>
array (
'id' => 8,
'name' => 'Поиск',
'alias' => 'search',
),
),
),
1 =>
array (
'id' => 6,
'name' => 'Заявки',
'alias' => 'requests',
'childrens' =>
array (
0 =>
array (
'id' => 9,
'name' => 'Заявки на поключение',
'alias' => 'connecting',
),
1 =>
array (
'id' => 10,
'name' => 'Заявки на ремонт',
'alias' => 'repairs',
),
2 =>
array (
'id' => 11,
'name' => 'Заявки на обход',
'alias' => 'round',
),
),
),
2 =>
array (
'id' => 7,
'name' => 'Отчёты',
'alias' => 'reports',
'childrens' =>
array (
0 =>
array (
'id' => 12,
'name' => 'Отдел маркетинга',
'alias' => 'marketing',
'childrens' =>
array (
0 =>
array (
'id' => 15,
'name' => 'Отчёт по списаниям',
'alias' => 'write-offs',
),
1 =>
array (
'id' => 16,
'name' => 'Отчёт по расходам',
'alias' => 'costs',
),
2 =>
array (
'id' => 17,
'name' => 'Годовой отчёт',
'alias' => 'year',
),
),
),
1 =>
array (
'id' => 14,
'name' => 'Управление',
'alias' => 'control',
0 =>
array (
0 =>
array (
'id' => 18,
'name' => 'Отчёт по эффективности работы',
'alias' => 'efficiency',
),
1 =>
array (
'id' => 19,
'name' => 'Отчёт по подключениям',
'alias' => 'connecting',
),
),
),
),
),
);
function flatten($arr)
{
$ret = [];
foreach ($arr as $item) {
$tmp = ['id' => $item['id'], 'name' => $item['name'], 'alias' => $item['alias'], ];
$hasChildren = array_key_exists('childrens', $item);
if ($hasChildren) {
$tmp['childrens'] = array_reduce(
$item['childrens'],
function ($prev, $_item) {return ltrim($prev . ', ' . $_item['name'], ', ');},
''
);
}
$ret[] = $tmp;
if ($hasChildren) {
$ret = array_merge($ret, flatten($item['childrens']));
}
}
return $ret;
}
var_dump(flatten($arr));
preferences:
55.16 ms | 402 KiB | 5 Q