开发者

PHP Recursive arrays to UL (Logic)

I'm referring from Convert array of paths into UL list

and i found an helpful answer with this function but from what I'm doing is doesn't work properly as I'm having a MySQL Tables structers with id, parentid, name to be able to make recursive category and sub category.

so I'm able to export the data into arrays which is has extra array called CHILDREN has the sub category arrays into it.

but when I try to use this function

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";
    }

The problem is that I got multiple output by

    as empty and I want to avoid them the output are

    <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>&开发者_JS百科lt;/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> 
    


    I believe you should check if is set value['children'] because as i see one line above

    echo $value['name'];
    

    $value should always be an array so you are getting into recursion on every element

    try using

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

    Instead of just if (is_array($value))


    function buildUL($array) {
            echo "\n<ul>\n";
            foreach ($array as $key => $value) {
                echo "<li><a href=\"#\">";
                echo $value['name'];
                echo "</a></li>\n";
                if (!empty($value['children']))
                    $this->buildUL($value['children']);
            }
            echo "</ul>\n";
        }
    

    try this one...

    By the way it is not proper to have <a ...> text <ul><li><a ...> test2 </a></li></ul> </a>

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新问答

    问答排行榜