Я создаю рекурсивную функцию меню php из базы данных.
Мое подключение:
$menu = $vt->prepare("SELECT * FROM menus");
$menu->execute(array());
$menuSonuc = $menu->fetchAll(PDO::FETCH_OBJ);
Эта функция генерирует пустую ul.
<li>
<a href = ""><span class = "sagok"></span>TITLE</a>
<ul></ul>
</li>
Мой вопрос: Как я могу предотвратить пустой ul в этой функции?
echo '<ul class = "anamenu">';
foreach ($menuSonuc as $menum) {
if ($menum->katID == null) {
echo '<li><a href = ""><span class = "asagiok"></span>' . $menum->baslik . '</a>';
$id = $menum->id;
kategoriler($menuSonuc, $id);
echo '</li>';
}
}
echo '</ul>';
function kategoriler($menuSonuc, $id)
{
echo '<ul>';
foreach ($menuSonuc as $menum) {
if ($menum->katID == $id) {
echo '<li><a href = ""><span class = "sagok"></span>' . $menum->baslik . '</a>';
kategoriler($menuSonuc, $menum->id);
echo '</li>';
}
}
echo '</ul>';
}






Если вы получаете пустое ul, это означает, что $menuSonuc пусто и не входит в foreach. Вы можете проверить, пусто ли оно, чтобы не было пусто ul
function kategoriler($menuSonuc, $id){
if (empty($menuSonuc)){
return;
}
echo '<ul>';
foreach ($menuSonuc as $menum) {
if ($menum->katID == $id) {
echo '<li><a href = ""><span class = "sagok"></span>' . $menum->baslik . '</a>';
kategoriler($menuSonuc, $menum->id);
echo '</li>';
}
}
echo '</ul>';
}
ОБНОВИТЬ
Если вы все еще получаете пустой ul, проблема в том условии, что вы проверяете $menum->katID == $id.
Это означает, что $menum->katID никогда не совпадает с $id.
Проверьте эти значения, и вы решите свою проблему. Или дайте нам пример ваших массивов, чтобы мы могли их проверить.
все еще становится пустым <ul></ul>
Вы получаете просто пустой <ul> или пустой ul внутри другого li? Пожалуйста, проверьте мое обновление
Вы должны добавить некоторые проверки, см. код ниже
if (!empty($menuSonuc)){
echo '<ul class = "anamenu">';
foreach ($menuSonuc as $menum) {
if ($menum->katID == null) {
echo '<li><a href = ""><span class = "asagiok"></span>' . $menum->baslik . '</a>';
$id = $menum->id;
kategoriler($menuSonuc, $id);
echo '</li>';
}
}
echo '</ul>';
}
function checkSub($menuSonuc, $id){
foreach ($menuSonuc as $menum) {
if ($menum->katID == $id) {
return true;
}
}
return false;
}
function kategoriler($menuSonuc, $id)
{
if (!empty($menuSonuc)){
$index=0;
foreach ($menuSonuc as $menum) {
if ($menum->katID == $id) {
if ($index==0){
echo '<ul>';
}
echo '<li><a href = "">'.((checkSub($menuSonuc, $menum->id))?'<span class = "sagok"></span>':''). $menum->baslik . '</a>';
kategoriler($menuSonuc, $menum->id);
echo '</li>';
$index++;
}
}
if ($index>0){
echo '</ul>';
}
}
}
все еще становится пустым <ul></ul>
Сейчас удален пустой <ul></ul> спасибо. Теперь, как я могу удалить класс sagok из диапазона? это стрелка вправо.
только что обновил ответ, добавил еще одну функцию для этого
Это тоже работа, спасибо, а как насчет асагиок класса span? это значок со стрелкой вниз, как я могу удалить asagiok из диапазона?
это также работает так: echo '<li><a href = "">'.((checkSub($menuSonuc, $menum->id))?'<span class = "asagiok"></span>' :''). $menum->baslik . '</а>'; правильный?
Что вы пытались отладить в своем коде?