列出子文件夹中的文件,并将其作为key=value放入数组中


list files in subfolders and put in array as key = value

如果这个问题对忍者来说很明显,我很抱歉,但我是PHP的新手,我整天都在努力。。

我正在尝试从文件夹结构中获取所有文件的列表。

目前它给了我一些类似的东西

数组([0]->路径/文件名[1]->路径/名称)数组([0]->路径/文件名称[1]->路径/名称..)

(每个文件夹一个)

function o99_list_all_files_in_dir($dir) //need to ocheck for server compatibility (unix,linux,win)
{ 
    $root = scandir($dir); 
    foreach($root as $value) 
    { 
        if($value === '.' || $value === '..') {continue;} 
        if(is_file("$dir/$value")) {$result[]="$dir/$value";continue;} 
    //if(is_file("$dir/$value")) {$result["$dir"]="$value";continue;} 
        foreach(k99_list_all_files_in_dir("$dir/$value") as $value) 
        { 
            $result[]=$value; 
        //$result["$dir"]=$value; 
        }
    } 
    //print_r($result);
    return $result; 
} 

几个问题:

1-我需要路径和文件名对,所以我想得到一个这样的数组:

结果([path]->[filename][aotherpath]->[aotherfilename])。

但是,如果我试图构造另一个数组(切换取消注释和注释行),函数将只给我每个目录中的第一个文件。

2-后来,我使用这个函数是为了将路径和文件名分开,所以我尝试了这个:

$result = o99_list_all_files_in_dir($upload_dir);   
                foreach ($result as $image) {
                 reset($image);
                 while (list($key, $val) = each($image)) {
                    // echo "$key => $val'n";
                 }
                $filename = pathinfo($image);// I need the path here ...
                         ...

但显然它不起作用(否则我不会在这里:-)

3-额外的问题:我如何从结果中筛选文件(例如thumbs.db),或者决定如何忽略或不忽略某些扩展名??

编辑I4-!重要(之前忘记了)-在处理未知的服务器路径(Linux、Win、Unix)时,我需要注意什么。。。这个功能对所有人都有效吗?

试试这个代码:

function scanFileNameRecursivly($path = '', &$name = array() )
{
  $path = $path == ''? dirname(__FILE__) : $path;
  $lists = @scandir($path);
  if(!empty($lists))
  {
      foreach($lists as $f)
      { 
          if(is_dir($path.DIRECTORY_SEPARATOR.$f) && $f != ".." && $f != ".")
          {
              scanFileNameRecursivly($path.DIRECTORY_SEPARATOR.$f, &$name); 
          }
          else
          {
              $name[] = $path.DIRECTORY_SEPARATOR.$f;
          }
      }
  }
  return $name;
}
$path = "abs path to your directory";
$file_names = scanFileNameRecursivly($path);
echo "<pre>";
var_dump($file_names);
echo "</pre>";