2024-12-02

PHP无限极数组如何映射成文件夹结构?

php无限极数组如何映射成文件夹结构?

使用 php 将无限极数组映射成文件夹

在处理配置文件时,经常需要将嵌套的数组映射成文件和目录结构。例如,给定以下配置文件:

$config = [
    'uuid'=>'string',
    'info'=>'string',
    'main'=>[
        'uuid'=>'string',
        'cmd'=>'string',
        'child'=>[
            'uuid'=>'string',
            'remark'=>'string',
            'game'=>[
                'user'=>'name',
                'money'=>'1000'
            ]
        ],
        'logs'=>[
            'path'=>'/path/path',
            'date'=>'2023-09-01'        
        ]
    ],
    'video'=>[
        'uuid'=>'vid',
        'info'=>'info',
        'file'=>[
            'size'=>'12900'
        ]
    ]
];
登录后复制

需要将其映射成如下目录结构:

main
main/child
main/child/game
main/logs
video
video/file
登录后复制

为了解决这个问题,可以使用如下的 php 代码将无限极数组映射成文件夹:

立即学习PHP免费学习笔记(深入)”;

function flatten($nodes, $prefix = '') {
    $list = [];

    foreach ($nodes as $key => $value) {
        if (is_array($value)) {
            $path = $prefix . $key;
            $list[] = $path;
            $list = array_merge($list, flatten($value, $path . '/'));
        }
    }

    return $list;
}

$list = flatten($config);
登录后复制

或者使用 recursiveiteratoriterator:

$list = [];
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($config), RecursiveIteratorIterator::SELF_FIRST);

foreach ($iterator as $key => $value) {
    if (is_array($value)) {
        $path = '';
        foreach (range(0, $iterator->getDepth()) as $depth) {
            $path .= $iterator->getSubIterator($depth)->key() . '/';
        }
        $list[] = rtrim($path, '/');
    }
}
登录后复制

以上就是PHP无限极数组如何映射成文件夹结构?的详细内容,更多请关注php中文网其它相关文章!

https://www.php.cn/faq/1124587.html

发表回复

Your email address will not be published. Required fields are marked *