微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 分解创建多维数组的路径

我试图从一个zip文件创建一个关联数组,其中文件夹是键,文件是最里面的值.

目前,当我在zip文件中的每个条目上/上进行爆炸时,我得到类似这样的内容

Array
(
    [0] => Folder1
    [1] => Folder2
    [2] => File1.txt
)
Array
(
    [0] => Folder1
    [1] => Folder2
    [2] => File2.txt
)
Array
(
    [0] => Folder1
    [1] => Folder3
    [2] => File3.txt
)

要做到这一点,我这样做(在$path上做一个print_r):

if(in_array($content["ext"], array("zip"))){
    $zip       = zip_open($file);
    while($zip_entry = zip_read($zip)){
        $zip_path    = zip_entry_name($zip_entry);
        $path        = explode("/", $zip_path);
        $path        = array_filter($path);
        $lastElement = end($path);

        foreach($path as $key => $item){
            if($item != $lastElement){

            }
        }
    }
}

print_r($files);

我想要的是$files包含一个多维数组,结果如下所示:

Array
(
    [Folder1] => Array
    (
        [Folder2] => Array
        (
            [0] => File1.txt
            [1] => File2.txt
        )
        [Folder3] => Array
        (
            [0] => File3.txt
        )
    )
)

没有深度的最佳方法是什么?

解决方法:

if (in_array($content["ext"], array("zip"))) {
    $zip = zip_open($file);

    $files = array();

    while ($zip_entry = zip_read($zip)) {
        $zip_path = zip_entry_name($zip_entry);
        $path = explode("/", $zip_path);
        $path = array_filter($path);
        $lastElement = end($path);

        //reset pointer
        $cur = &$files;

        $count = count($path);

        //set pointer to proper parent folder
        for ($i = 0; $i < $count - 1; $i++) {
            $cur = &$cur[$path[$i]];
        }

        //add file
        $cur[] = $path[$i];
    }

    //delete pointer
    unset($cur);
}

print_r($files);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐