Рекурсивная функция PHP пуста <ul></ul> проблема

Я создаю рекурсивную функцию меню 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>';
           }

Что вы пытались отладить в своем коде?

Nico Haase 24.04.2019 10:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
1
81
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы получаете пустое 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>

doli 24.04.2019 09:43

Вы получаете просто пустой <ul> или пустой ul внутри другого li? Пожалуйста, проверьте мое обновление

Edison Biba 24.04.2019 10:00
Ответ принят как подходящий

Вы должны добавить некоторые проверки, см. код ниже

    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>

doli 24.04.2019 09:43

Сейчас удален пустой <ul></ul> спасибо. Теперь, как я могу удалить класс sagok из диапазона? это стрелка вправо.

doli 24.04.2019 10:20

только что обновил ответ, добавил еще одну функцию для этого

Varun Malhotra 24.04.2019 10:29

Это тоже работа, спасибо, а как насчет асагиок класса span? это значок со стрелкой вниз, как я могу удалить asagiok из диапазона?

doli 24.04.2019 10:35

это также работает так: echo '<li><a href = "">'.((checkSub($menuSonuc, $menum->id))?'<span class = "asagiok"></span>' :''). $menum->baslik . '</а>'; правильный?

doli 24.04.2019 10:42

Другие вопросы по теме