我正在尝试从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
)
)
)
没有深度的最佳方法是什么?
答案 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中。如果确实如此,则继续,否则将其添加到数组中,然后继续