PHP递归数组到UL(逻辑)

PHP递归数组到UL(逻辑),php,codeigniter,Php,Codeigniter,我指的是 我发现了这个函数的一个有用的答案,但我现在做的是,它不能正常工作,因为我有一个id为、parentid为、name为的MySQL表结构器,可以创建递归类别和子类别 所以我可以将数据导出到数组中,这个数组有一个额外的数组,叫做CHILDREN,它有子类别数组 但是当我尝试使用这个函数时 function buildUL($array) { echo "\n<ul>\n"; foreach ($array as $key => $value

我指的是

我发现了这个函数的一个有用的答案,但我现在做的是,它不能正常工作,因为我有一个id为、parentid为、name为的MySQL表结构器,可以创建递归类别和子类别

所以我可以将数据导出到数组中,这个数组有一个额外的数组,叫做CHILDREN,它有子类别数组

但是当我尝试使用这个函数时

function buildUL($array) {
        echo "\n<ul>\n";
        foreach ($array as $key => $value) {
            echo "<li><a href=\"#\">";
            echo $value['name'];
            if (is_array($value))
                $this->buildUL($value['children']);
            echo "</a></li>\n";
        }
        echo "</ul>\n";
    }
函数buildUL($array){
回声“\n
    \n”; foreach($key=>$value的数组){ 回声“
  • \n”; } 回声“
\n”; }
问题是,
    的多个输出都是空的,我想避免它们 输出是

    <ul> 
    <li><a href="#">A
    <ul> 
    <li><a href="#">C
    <ul> 
    <li><a href="#">F
    <ul> 
    <li><a href="#">test
    <ul> 
    </ul> 
    </a></li> 
    </ul> 
    </a></li> 
    </ul> 
    </a></li> 
    <li><a href="#">B
    <ul> 
    </ul> 
    </a></li> 
    </ul> 
    </a></li> 
    <li><a href="#">1
    <ul> 
    <li><a href="#">2
    <ul> 
    </ul> 
    </a></li> 
    <li><a href="#">3
    <ul> 
    </ul> 
    </a></li> 
    </ul> 
    </a></li> 
    <li><a href="#">99
    <ul> 
    <li><a href="#">Another Test
    <ul> 
    </ul> 
    </a></li> 
    <li><a href="#">2 X
    <ul> 
    </ul> 
    </a></li> 
    <li><a href="#">Ham Yum
    <ul> 
    </ul> 
    </a></li> 
    <li><a href="#">Be You
    <ul> 
    </ul> 
    </a></li> 
    <li><a href="#">1 Z
    <ul> 
    </ul> 
    </a></li> 
    </ul> 
    </a></li> 
    </ul> 
    

  • 我认为您应该检查是否设置了值['children'],因为我看到上面一行

    echo $value['name'];
    
    $value应该始终是一个数组,这样就可以对每个元素进行递归

    试用

    if ( isset($value['children'] && is_array($value['children']) )
    

    我认为您应该检查is设置值['children'],而不是仅仅检查if(is_array($value))

    ,因为正如我在上面一行看到的那样

    echo $value['name'];
    
    $value应该始终是一个数组,这样就可以对每个元素进行递归

    试用

    if ( isset($value['children'] && is_array($value['children']) )
    
    而不仅仅是if(is_array($value))

    函数buildUL($array){
    回声“\n
      \n”; foreach($key=>$value的数组){ 回声“
    • \n”; 如果(!empty($value['children'])) $this->buildUL($value['children']); } 回声“
    \n”; }
    试试这个

    顺便说一下,让
    文本
    • 测试2
    函数buildUL($array)是不合适的{ 回声“\n
      \n”; foreach($key=>$value的数组){ 回声“
    • \n”; 如果(!empty($value['children'])) $this->buildUL($value['children']); } 回声“
    \n”; } 试试这个


    顺便说一句,让
    文本
    • 测试2

    非法输出是不合适的,我的主要功能是propa html格式,但我只是收到了一个问题,因为
      是空的,我不明白是什么原因或如何避免非法输出,我的主要功能是propa html格式,但我只是收到了一个问题,将
        接收为空,我不明白是什么导致了这个问题,也不知道如何避免它。问题是,每个循环中的函数输出为空
          ,我已经通过使用preg\u replace和substr来移除emoty
            来修复它。问题是,我在每个循环中都有函数输出为空
              通过使用preg_replace和substr移除emoty来修复此问题