Я нашел довольно простой пример, который работает с массивом категорий, извлеченных из БД.Запрос «SELECT * FROM Categories» создаст массив всех категорий.
В моей таблице категорий у меня есть поля 'id', 'parent_id' и 'name'.Это все.Базовые категории имеют родительский идентификатор, установленный как 0. У подкадров родительский идентификатор установлен как идентификатор родительской категории.Просто верно?Вот код:
$categories = [
['id'=>1,'parentID'=>0, 'name' => 'Main 1' ],
['id'=>2,'parentID'=>0, 'name' => 'Main 2' ],
['id'=>3,'parentID'=>0, 'name' => 'Main 3' ],
['id'=>4,'parentID'=>0, 'name' => 'Main 4' ],
['id'=>5,'parentID'=>1, 'name' => 'sub 1 - 1' ],
['id'=>6,'parentID'=>1, 'name' => 'sub 1 - 2' ],
['id'=>11,'parentID'=>5, 'name' => 'sub 1 - 2' ],
['id'=>12,'parentID'=>5, 'name' => 'sub 1 - 2' ],
['id'=>13,'parentID'=>5, 'name' => 'sub 1 - 2' ],
['id'=>14,'parentID'=>6, 'name' => 'sub 1 - 2' ],
['id'=>7,'parentID'=>2, 'name' => 'sub 2 - 1' ],
['id'=>8,'parentID'=>2, 'name' => 'sub 2 - 2' ],
['id'=>9,'parentID'=>3, 'name' => 'sub 3 - 1' ],
['id'=>10,'parentID'=>3, 'name' => 'sub 3 - 2' ]
];
function getCategories($categories, $parent = 0)
{
$html = "<ul>";
foreach($categories as $cat)
{
if($cat['parentID'] == $parent)
{
$current_id = $cat['id'];
$html .= "<li>" . $cat['name'] ;
$html .= getCategories($categories, $current_id);
$html .= "</li>";
}
}
$html .= "</ul>";
return $html;
}
echo getCategories($categories) ;
Массив категорий $ является результатом одного SQL-запроса «ВЫБОР * ИЗ категорий»