2015-05-11 2 views
0

я хочу написать скрипт файл сканированиеНеопределенных переменный в возвращении цикла Еогеаспа

этот скрипт должен искать в Лоте папки и сделать список из файлов

я написал этот сценарий, но возвращение не работает

function checkdir($dir) { 
    $file_array = array(); 
    if (is_dir($dir)) { 
    $objects = scandir($dir); 
    foreach ($objects as $key => $object) { 
     if ($object != "." && $object != "..") { 
     if (filetype($dir."/".$object) == "dir") { 
      // folder loop , try find files again 
      checkdir($dir."/".$object); 
      //$file_array[] = 'dir'; 

     } else { 
      $file_array[] = $dir."/".$object; 
      //echo $dir."/".$object.'<br>'; 
     } 
     } 

    }// end foreach 
    //reset($objects); 
    } 
    return $file_array; 

} 

, как вы можете видеть в else состоянии я написал $file_array[] = $dir."/".$object; это печать значение, но не может хранить значение в массиве

+0

Почему вы не использовать DirectoryIterator? http://php.net/manual/de/class.directoryiterator.php –

+0

вы никогда не храните возвращаемое значение 'checkdir()' рекурсивных вызовов, поэтому эта функция только когда-либо вернет содержимое директора верхнего уровня, который вы проходите в. Все остальное в основном бесполезно, так как вы перебираете все подкаталоги, а затем отбрасываете результаты. –

+0

@MarcB извините, я не могу понять ваши средства, можете ли вы опубликовать пример этого? Я хочу вернуть массив в этой функции – user3325376

ответ

1

Рекурсивный вызов нужно добавить свои результаты в массив:

$file_array = array_merge($file_array, checkdir($dir."/".$object)); 

Всего функции:

function checkdir($dir) { 
    $file_array = array(); 
    if (is_dir($dir)) { 
     $objects = scandir($dir); 
     foreach ($objects as $key => $object) { 
      if ($object != "." && $object != "..") { 
       if (filetype($dir."/".$object) == "dir") { 
        // folder loop , try find files again 
        $file_array = array_merge($file_array, checkdir($dir."/".$object)); 
        //$file_array[] = 'dir'; 
       } else { 
        $file_array[] = $dir."/".$object; 
        //echo $dir."/".$object.'<br>'; 
       } 
      } 
     }// end foreach 
    //reset($objects); 
    } 
    return $file_array; 
} 
+0

Я изменил его, но все же не укусил – user3325376

+0

Возможно, вы не изменили его правильно, я опубликовал всю функцию. – Barmar

+0

спасибо большое :) – user3325376

0

Как об этом:

if (! function_exists('glob_recursive')){ 
    // Does not support flag GLOB_BRACE 

    function glob_recursive($pattern, $flags = 0){ 
     $files = glob($pattern, $flags); 

     foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir){ 
      $files = array_merge($files, glob_recursive($dir.'/'.basename($pattern), $flags)); 
     } 

     return $files; 
    } 
} 

?> 

Это пример из php.net, отметьте «glob».

Смежные вопросы