Panelimde kullandığım bir menu fonksiyonu var aşağı bırakıyorum işine yarayacağını düşünmekteyim.
Gerekli alanları kendine göre düzenleyip bir dene

<?php
$query = $db->prepare('SELECT * FROM menu WHERE menu_top=:t_c ORDER BY order_sort ASC');
$query->execute([
't_c' => 0
]);
$cat_result = $query->fetchAll(PDO::FETCH_ASSOC);
if ($query->rowCount()) :
function subCategories($id)
{
$layer = '';
global $db;
$query = $db->prepare('SELECT * FROM menu WHERE menu_top=:t_c ORDER BY order_sort ASC');
$query->execute([
't_c' => $id
]);
$subcat_row = $query->fetchAll(PDO::FETCH_ASSOC);
if ($query->rowCount()) {
$layer .= '<ul class="submenu">';
foreach ($subcat_row as $subCat) {
$layer .= '<li><a href="'. $subCat['link'] . '">' . $subCat['title'] . '</a>' . subCategories($subCat['menu_id']) . '</li>';
}
$layer .= '</ul>';
}
return $layer;
}
foreach ($cat_result as $mainCat) :
?>
<li>
<a <?= 'href="' . $mainCat['link']. '"' ?>>
<?= $mainCat['title'] ?>
</a>
<?= subCategories($mainCat['menu_id']); ?>
</li>
<?php
endforeach;
endif;

