递归PHP阵列出现故障
我试图创建一个返回全部由他们在分组目录中的文件的递归函数。我的文件结构是这样的递归PHP阵列出现故障
.
|-- Dir A
| +-- file 1
| +-- file 2
|-- Dir B
| +-- file 11
| +-- file 12
,我希望得到的数组是
array[0][0] = Dir A
array[0][1] = file 1
array[0][2] = file 2
array[1][0] = Dir B
array[1][1] = file 11
array[1][2] = file 12
虽然回声的我已经表明,它发现所有这些,最终阵列看起来像这样:
array[0][0] = Dir A
array[1][0] = Dir B
因此文件没有被存储在数组中,或者被覆盖,但是我找不到这个错误。有人请指出吗?我的功能如下。
function GetAllFiles($dir = '.', $fileArray = '', $idx = -1){
if ($fileArray == '') $fileArray = array();
if(is_dir($dir)) {
if($dh = opendir($dir)){
while($file = readdir($dh)) {
if($file != '.' && $file != '..'){
if(is_dir($dir . $file)){
$idx++;
echo 'A '.$idx . ' - ' .$dir . $file.'<br>';
$fileArray[$idx][] = $dir . $file;
GetAllFiles($dir . $file . '/', $fileArray, $idx);
}else{
echo 'B '.$idx. ' - ' .$dir . $file.'<br>';
$fileArray[$idx][] = $dir . $file;
}
}
}
}
closedir($dh);
}
return $fileArray;
}
这工作后,我做了一些修改:
<?php
function GetAllFiles($dir) {
$fileTree = [];
if (is_dir($dir) && ($dh = opendir($dir))) {
while ($node = readdir($dh)) {
if (is_dir($dir . '/' . $node)) {
if(!in_array($node, ['.', '..'])) {
$fileTree[] = GetAllFiles($dir . '/' . $node);
array_unshift($fileTree[count($fileTree)-1], $node);
}
} else {
$fileTree[] = $node;
}
}
closedir($dh);
}
return $fileTree;
}
print_r(GetAllFiles('tree'));
鉴于文件树:
tree
tree/file1
tree/file2
tree/folder1
tree/folder1/file11
tree/folder1/file12
tree/folder2
tree/folder2/file21
tree/folder2/file22
tree/folder2/folder23
tree/folder2/folder23/file231
tree/folder2/folder23/file233
tree/folder2/folder23/file232
它产生的输出:
Array
(
[0] => file2
[1] => Array
(
[0] => folder1
[1] => file11
[2] => file12
)
[2] => Array
(
[0] => folder2
[1] => Array
(
[0] => folder23
[1] => file231
[2] => file233
[3] => file232
)
[2] => file21
[3] => file22
)
[3] => file1
)
基本上是:
[0] => file2
[1][0] => folder1
[1][1] => file11
[1][2] => file12
[2][0] => folder2
[2][1][0] => folder23
[2][1][1] => file231
[2][1][2] => file233
[2][1][3] => file232
[2][2] => file21
[2][3] => file22
[3] => file1
echo 'B '.$idx. ' - ' .$dir . $file.'<br>';
array_push($[$idx],$dir.$file);
如果我在文件上增加$ idx,它将不会将所有文件与包含它们的目录分组。 – user3052443
??如果您尝试在主目录中创建另一个目录,它的代码将搜索一个目录,它将添加它,但它不会在while循环开始时根据if语句添加任何文件 – Osama
并且idx的增量必须为while循环的结尾 – Osama
如果在一个目录中是一个文件夹和一个文件呢? – Webdesigner
你可以发布你如何调用'getAllFiles()'和你正在得到的输出/错误吗? –
最初的调用只是GetAllFiles($ dir);输出显示在我的问题中。 – user3052443