3v4l.org

run code in 300+ PHP versions simultaneously
<?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