php - 如何递归构建树深度未知的 <select>

标签 php recursion tree

我有一个具有树数据结构的 MySQL 表。这些字段是 _id , nameparentId .当记录没有父项时,parentId默认为 0。这样我就可以构建一个数组,然后递归地打印每条记录。

构建的数组如下所示:

Array
(
    [1] => Array
        (
            [parentId] => 0
            [name] => Countries
            [_id] => 1
            [children] => Array
                (
                    [2] => Array
                        (
                            [parentId] => 1
                            [name] => America
                            [_id] => 2
                            [children] => Array
                                (
                                    [3] => Array
                                        (
                                            [parentId] => 2
                                            [name] => Canada
                                            [_id] => 3
                                            [children] => Array
                                                (
                                                    [4] => Array
                                                        (
                                                            [parentId] => 3
                                                            [name] => Ottawa
                                                            [_id] => 4
                                                        )

                                                )

                                        )

                                )

                        )

                    [5] => Array
                        (
                            [parentId] => 1
                            [name] => Asia
                            [_id] => 5
                        )

                    [6] => Array
                        (
                            [parentId] => 1
                            [name] => Europe
                            [_id] => 6
                            [children] => Array
                                (
                                    [7] => Array
                                        (
                                            [parentId] => 6
                                            [name] => Italy
                                            [_id] => 7
                                        )

                                    [11] => Array
                                        (
                                            [parentId] => 6
                                            [name] => Germany
                                            [_id] => 11
                                        )

                                    [12] => Array
                                        (
                                            [parentId] => 6
                                            [name] => France
                                            [_id] => 12
                                        )

                                )

                        )

                    [8] => Array
                        (
                            [parentId] => 1
                            [name] => Oceania
                            [_id] => 8
                        )

                )

         )

 )

打印无序列表 <ul>递归非常简单。这是我使用的功能:

function toUL ($arr) {

    $html = '<ul>' . PHP_EOL;

    foreach ( $arr as $v ) {

        $html.= '<li>' . $v['name'] . '</li>' . PHP_EOL;

        if ( array_key_exists('children', $v) ) {
            $html.= toUL($v['children']);
        }

    }

    $html.= '</ul>' . PHP_EOL;

    return $html;
}

但我一直在打印 <select>以树状结构的方式:

Countries
-- America
---- Canada
------ Ottawa
-- Asia
-- Europe
---- Italy
---- Germany
---- France
-- Oceania

我想打印 --与元素的深度一样多,但我不知道如何计算深度。

我的问题是:是否可以构建一个 <select>不知深浅?

提前谢谢你。

最佳答案

传递一个参数来计算迭代次数,如$pass

function toUL ($arr, $pass = 0) {

    $html = '<ul>' . PHP_EOL;

    foreach ( $arr as $v ) {           

        $html.= '<li>';
        $html .= str_repeat("--", $pass); // use the $pass value to create the --
        $html .= $v['name'] . '</li>' . PHP_EOL;

        if ( array_key_exists('children', $v) ) {
            $html.= toUL($v['children'], $pass+1);
        }

    }

    $html.= '</ul>' . PHP_EOL;

    return $html;
}

关于php - 如何递归构建树深度未知的 <select>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10011194/

相关文章:

php - CHMOD 目录只能通过服务器上的 ftp 或脚本读取

php - 编写我的 linux 守护进程的首选方法是什么?

recursion - LISP 中的 wheres-waldo 函数

python - 遍历决策树并捕获每个节点

java - 访问级联 ArrayList 中包含的特定对象

C++ 使用树避免循环依赖

php - 在mysql查询中获取id和echo

PHP 尝试使用计算机名而不是登录名登录 MSSQL(Windows 身份验证)

使用递归的 C++ vector 元素求和

java - Java中将所有字符大写并在每个字符之间添加空格的递归方法