分解路径以创建多维数组


Explode path to create multidimensional array

我正在尝试从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);

您也许可以在/上分解路径,然后使用 for 循环将所有部分放入其他数组中。

然后,您可以添加一个 if(...) 检查当前文件夹或文件是否已在数组中。 如果这是真的,你继续,否则你把它添加到数组中,然后继续