首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP递归函数空<ul></ul>问题

PHP递归函数空<ul></ul>问题
EN

Stack Overflow用户
提问于 2019-04-24 07:31:22
回答 2查看 89关注 0票数 2

我正在从数据库构建递归的php菜单函数。

我的联系:

代码语言:javascript
复制
 $menu = $vt->prepare("SELECT * FROM menus");
 $menu->execute(array());
 $menuSonuc = $menu->fetchAll(PDO::FETCH_OBJ);

这个函数生成空ul。

代码语言:javascript
复制
<li>
 <a href=""><span class="sagok"></span>TITLE</a>
 <ul></ul>
</li>

我的问题是:如何防止这个函数中出现空ul?

代码语言:javascript
复制
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>';
           }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-24 07:41:13

您必须添加一些检查,请参阅下面的代码

代码语言:javascript
复制
    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>';
                  }

              }
           }
票数 0
EN

Stack Overflow用户

发布于 2019-04-24 07:37:50

如果是空的ul,这意味着$menuSonuc是空的,它不会进入foreach。您可以检查它是否为空,以防止空ul

代码语言:javascript
复制
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一样。检查这些值,您将解决您的问题。或者给我们一个数组的例子,这样我们就可以检查它们了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55824580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档