爆炸路径以创建多维数组

时间:2015-01-16 23:53:38

标签: php arrays multidimensional-array path

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

要实现这一目标(在print_r上执行$path):

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
        )
    )
)

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

2 个答案:

答案 0 :(得分:1)

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);

答案 1 :(得分:0)

您可以在/上爆炸路径,然后使用forloop将所有部分放在另一个数组中。

然后,您可以添加if(...)检查当前文件夹或文件是否已存在于Array中。如果确实如此,则继续,否则将其添加到数组中,然后继续