通过指针实现二维数组转换为树形结构

 PHP基础  2022-11-23  admin  615  830

/**
 * 通过指针实现二维数组转换为树形结构
 * @param array $data 数据
 * @param string $childrenname 子数据名
 * @param string $keyName 数据key名
 * @param string $pidName 数据上级key名
 * @return array
 */
function array2Tree(array $data, string $childrenname = 'children', string $keyName = 'id', string $pidName = 'pid'): array
{
    $list = array();
    foreach ($data as $value) {
        $list[$value[$keyName]] = $value;
    }
    static $tree = array();
    foreach ($list as $item) {
        if (isset($list[$item[$pidName]])) {
            $list[$item[$pidName]][$childrenname][] = &$list[$item[$keyName]];
        } else {
            $tree[] = &$list[$item[$keyName]];
        }
    }
    return $tree;
}

测试

$data = [
    [
        'id' => '1',
        'pid' => '0',
        'name' => '广东'
    ],
    [
        'id' => '2',
        'pid' => '1',
        'name' => '深圳'
    ],
    [
        'id' => '3',
        'pid' => '2',
        'name' => '宝安区'
    ],
    [
        'id' => '4',
        'pid' => '2',
        'name' => '南山区'
    ],
    [
        'id' => '10',
        'pid' => '0',
        'name' => '浙江'
    ],
];

print_r(array2Tree($data));
Array
(
    [0] => Array
        (
            [id] => 1
            [pid] => 0
            [name] => 广东
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [pid] => 1
                            [name] => 深圳
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 3
                                            [pid] => 2
                                            [name] => 宝安区
                                        )

                                    [1] => Array
                                        (
                                            [id] => 4
                                            [pid] => 2
                                            [name] => 南山区
                                        )

                                )

                        )

                )

        )

    [1] => Array
        (
            [id] => 10
            [pid] => 0
            [name] => 浙江
        )

)
PS E:\www\shop\branches\shop3> php test4.php
Array
(
    [0] => Array
        (
            [id] => 1
            [pid] => 0
            [name] => 广东
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [pid] => 1
                            [name] => 深圳
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 3
                                            [pid] => 2
                                            [name] => 宝安区
                                        )

                                    [1] => Array
                                        (
                                            [id] => 4
                                            [pid] => 2
                                            [name] => 南山区
                                        )

                                )
    [1] => Array
        (
            [id] => 10
            [pid] => 0
            [name] => 浙江
        )

)


如果文章对您有帮助,点击下方的广告,支持一下作者吧!

相关推荐


go 在Windows系统中交叉编译临时环境变量设置

go 编译临时环境变量设置并 交叉编译命令$env:GOOS="linux";$env:GOARCH="amd64";gobuild-ofilenametest.go$env:GOOS="linux";$env:GOARCH="amd64";`gobuild-ofilenametest.go`这两种方式 都是在Powe

phpstorm 设置 外部命令

C:\Program Files\WindowsApps\Microsoft.WindowsTerminal_1.20.11781.0_x64__8wekyb3d8bbwe\wt.exe-d $ContentRoot$$ProjectFileDir$

点名工具,抽奖软件

点名工具,抽奖软件

酷炫的倒计时客户端

QQ: 425100867捐赠开发者: