Преобразование таблицы MySQL по отношению к многомерному массиву

У меня есть таблица меню:

id, slug, label, parent

Родитель имеет отношение к id так что если у вас есть:

1, 'foo-bar', 'Foo Bar', NULL

Это будет корневой элемент, тогда как:

2, 'foo', 'Foo ', 1

Будет принадлежать «foo-bar». Тогда у вас могут быть предметы, принадлежащие foo и т. Д.

Как я могу превратить это в многомерный массив меню в PHP? Поэтому я могу делать такие вещи, как:

 <?= $menu['foo-bar']['foo'] // echos 'Foo' ?> 

Мои требования очень похожи на то, как преобразовать таблицу БД с отношением родительского сына к многомерному массиву, но ответ там не работает; он не рекурсивный.

Вот пример foreach (не проверенный), который может делать то, что вы хотите.

 <?php // $results is your data from database $menu = array(); foreach($results as $k => $result) { $key = $result['id']; $parent = $result['parent']; if(!empty($parent)){ array_push($menu[$parent]['parents'], $result); } else { unset($results[$k]['parent']; $menu[$key] = $result; } } var_dump($menu); не <?php // $results is your data from database $menu = array(); foreach($results as $k => $result) { $key = $result['id']; $parent = $result['parent']; if(!empty($parent)){ array_push($menu[$parent]['parents'], $result); } else { unset($results[$k]['parent']; $menu[$key] = $result; } } var_dump($menu);