У меня есть таблица меню:
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);