直接上代码 + 示例
<?php
    /**
     * php递归生成树形结构 - 无限分类 - 构建树形结构 - 省市区三级联动
     * 
     * @param array $lists 一维数组,包括不同级别的各行数据
     * @param int $parentId 目标节点的父类ID (可以是顶级分类的父ID,也可以是任意节点的父ID)
     * @param string $keyParentId 数组下标 - 父类ID
     * @param string $keySonId 数组下标 - 父类ID
     * @param string $keyChildren 数组新增下标 - 子节点下标
     * 
     * @author Rudon
     * @link https://rudon.blog.csdn.net/
     */
    function getTree($lists, $parentId = 0, $keyParentId = 'parent_id', $keySonId = 'id', $keyChildren = 'children') {
        $tree = [];
        foreach($lists as $k => $v)
        {
            if(array_key_exists($keySonId, $v) && array_key_exists($keyParentId, $v) && $v[$keyParentId] == $parentId) {
                $v[$keyChildren] = getTree($lists, $v[$keySonId], $keyParentId, $keySonId, $keyChildren);
                $tree[] = $v;
            }
        }
        return $tree;
    }
    // 示例
    $rows = array(
        array('id' => 1, 'parent_id' => 0, 'name' => '河北省'),
        array('id' => 2, 'parent_id' => 0, 'name' => '北京市'),
        array('id' => 3, 'parent_id' => 1, 'name' => '邯郸市'),
        array('id' => 4, 'parent_id' => 2, 'name' => '朝阳区'),
        array('id' => 5, 'parent_id' => 2, 'name' => '通州区'),
        array('id' => 6, 'parent_id' => 4, 'name' => '望京'),
        array('id' => 7, 'parent_id' => 4, 'name' => '酒仙桥'),
        array('id' => 8, 'parent_id' => 3, 'name' => '永年区'),
        array('id' => 9, 'parent_id' => 1, 'name' => '武安市'),
        array('id' => 10, 'parent_id' => 8, 'name' => '永年区镇'),
        array('id' => 11, 'parent_id' => 0, 'name' => '上海市')
    );
    // 获取所有省市区关系
    $tree = getTree($rows, 0);
    echo "<pre>";
    print_r($tree);
    echo "</pre>";
    // 获取北京市(ID=2)的各下级
    // $tree = getTree($rows, 2);
    // 结果
    /**
     * 
    Array
    (
        [0] => Array
            (
                [id] => 1
                [parent_id] => 0
                [name] => 河北省
                [children] => Array
                    (
                        [0] => Array
                            (
                                [id] => 3
                                [parent_id] => 1
                                [name] => 邯郸市
                                [children] => Array
                                    (
                                        [0] => Array
                                            (
                                                [id] => 8
                                                [parent_id] => 3
                                                [name] => 永年区
                                                [children] => Array
                                                    (
                                                        [0] => Array
                                                            (
                                                                [id] => 10
                                                                [parent_id] => 8
                                                                [name] => 永年区镇
                                                                [children] => Array
                                                                    (
                                                                    )
                                                            )
                                                    )
                                            )
                                    )
                            )
                        [1] => Array
                            (
                                [id] => 9
                                [parent_id] => 1
                                [name] => 武安市
                                [children] => Array
                                    (
                                    )
                            )
                    )
            )
        [1] => Array
            (
                [id] => 2
                [parent_id] => 0
                [name] => 北京市
                [children] => Array
                    (
                        [0] => Array
                            (
                                [id] => 4
                                [parent_id] => 2
                                [name] => 朝阳区
                                [children] => Array
                                    (
                                        [0] => Array
                                            (
                                                [id] => 6
                                                [parent_id] => 4
                                                [name] => 望京
                                                [children] => Array
                                                    (
                                                    )
                                            )
                                        [1] => Array
                                            (
                                                [id] => 7
                                                [parent_id] => 4
                                                [name] => 酒仙桥
                                                [children] => Array
                                                    (
                                                    )
                                            )
                                    )
                            )
                        [1] => Array
                            (
                                [id] => 5
                                [parent_id] => 2
                                [name] => 通州区
                                [children] => Array
                                    (
                                    )
                            )
                    )
            )
        [2] => Array
            (
                [id] => 11
                [parent_id] => 0
                [name] => 上海市
                [children] => Array
                    (
                    )
            )
    )
    * 
    */



















