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));
Output for 7.2.0 - 7.2.34, 7.3.0 - 7.3.31, 7.4.0 - 7.4.25, 8.0.0 - 8.0.12, 8.1rc1 - rc3
array(16) { [0]=> array(4) { ["id"]=> int(1) ["name"]=> string(24) "Пользователи" ["alias"]=> string(5) "users" ["childrens"]=> string(42) "Создание, Список, Поиск" } [1]=> array(3) { ["id"]=> int(2) ["name"]=> string(16) "Создание" ["alias"]=> string(6) "create" } [2]=> array(4) { ["id"]=> int(3) ["name"]=> string(12) "Список" ["alias"]=> string(4) "list" ["childrens"]=> string(36) "Активные, Удаленные" } [3]=> array(3) { ["id"]=> int(4) ["name"]=> string(16) "Активные" ["alias"]=> string(6) "active" } [4]=> array(3) { ["id"]=> int(5) ["name"]=> string(18) "Удаленные" ["alias"]=> string(7) "deleted" } [5]=> array(3) { ["id"]=> int(8) ["name"]=> string(10) "Поиск" ["alias"]=> string(6) "search" } [6]=> array(4) { ["id"]=> int(6) ["name"]=> string(12) "Заявки" ["alias"]=> string(8) "requests" ["childrens"]=> string(100) "Заявки на поключение, Заявки на ремонт, Заявки на обход" } [7]=> array(3) { ["id"]=> int(9) ["name"]=> string(38) "Заявки на поключение" ["alias"]=> string(10) "connecting" } [8]=> array(3) { ["id"]=> int(10) ["name"]=> string(30) "Заявки на ремонт" ["alias"]=> string(7) "repairs" } [9]=> array(3) { ["id"]=> int(11) ["name"]=> string(28) "Заявки на обход" ["alias"]=> string(5) "round" } [10]=> array(4) { ["id"]=> int(7) ["name"]=> string(12) "Отчёты" ["alias"]=> string(7) "reports" ["childrens"]=> string(53) "Отдел маркетинга, Управление" } [11]=> array(4) { ["id"]=> int(12) ["name"]=> string(31) "Отдел маркетинга" ["alias"]=> string(9) "marketing" ["childrens"]=> string(95) "Отчёт по списаниям, Отчёт по расходам, Годовой отчёт" } [12]=> array(3) { ["id"]=> int(15) ["name"]=> string(34) "Отчёт по списаниям" ["alias"]=> string(10) "write-offs" } [13]=> array(3) { ["id"]=> int(16) ["name"]=> string(32) "Отчёт по расходам" ["alias"]=> string(5) "costs" } [14]=> array(3) { ["id"]=> int(17) ["name"]=> string(25) "Годовой отчёт" ["alias"]=> string(4) "year" } [15]=> array(3) { ["id"]=> int(14) ["name"]=> string(20) "Управление" ["alias"]=> string(7) "control" } }

preferences:
84.19 ms | 549 KiB | 17 Q