递归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; 
    } 
+0

如果在一个目录中是一个文件夹和一个文件呢? – Webdesigner

+0

你可以发布你如何调用'getAllFiles()'和你正在得到的输出/错误吗? –

+0

最初的调用只是GetAllFiles($ dir);输出显示在我的问题中。 – user3052443

这工作后,我做了一些修改:

<?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); 
+0

如果我在文件上增加$ idx,它将不会将所有文件与包含它们的目录分组。 – user3052443

+0

??如果您尝试在主目录中创建另一个目录,它的代码将搜索一个目录,它将添加它,但它不会在while循环开始时根据if语句添加任何文件 – Osama

+0

并且idx的增量必须为while循环的结尾 – Osama