$path = 'E:/Zl/资料-1/资料库/3005  奥迪A6L新型C6原厂资料';
function get_filetree($path){
$tree = array();
foreach(glob($path."/{*.pdf,*.doc,*.ppt}", GLOB_BRACE) as $single){
if(is_dir($single)){
$tree = array_merge($tree,get_filetree($single));
}
else{
$tree[] = $single;
}
}
return $tree;
}
print_r(get_filetree($path));把{*.pdf,*.doc,*.ppt} 换成 * 就可以显示所有文件了,目录有些文件....

解决方案 »

  1.   

    哦,我明白是怎么回事了, 加上{*.pdf,*.doc,*.ppt},就只搜索文件了,但是如果要搜索此文件夹下所有这些类型的文件,应该怎么修改呢?
      

  2.   

    我比较好奇的是path里面的空格
      

  3.   

    这样写function get_filetree($path){
      $tree = array();
      foreach(glob($path."/*.{pdf,doc,ppt}", GLOB_BRACE) as $single) {
        if(is_file($single)) $tree[] = $single;
      }
      foreach(glob($path."/*", GLOB_ONLYDIR ) as $single) {
        $tree = array_merge($tree,get_filetree($single));
      }
      return $tree;
    }
      

  4.   

    为何这样子就不行?我是菜鸟.....
    function get_filetree($path){
    $tree = array();
    foreach(glob($path.'/*') as $single){
    if(is_dir($single)){ $tree = array_merge($tree,get_filetree($single));
    }
    else{
    if(glob($path."*/*.{pdf,doc,ppt}", GLOB_BRACE)){
    $tree[] = $single;
    }}
    }
    return $tree;
    }
    print_r(get_filetree($path));
      

  5.   

    你#6的写法也是可以的,但用错了目标
    if(glob($path."*/*.{pdf,doc,ppt}", GLOB_BRACE)){
    应为
    if(glob($single."{pdf,doc,ppt}", GLOB_BRACE)){
    目的是判断 $single 的后缀是否符合要求我#4的代码:
      //取得所有符合条件的文件名
      foreach(glob($path."/*.{pdf,doc,ppt}", GLOB_BRACE) as $single) {
        if(is_file($single)) $tree[] = $single;
      }
      //遍历所有子目录
      foreach(glob($path."/*", GLOB_ONLYDIR ) as $single) {
        $tree = array_merge($tree,get_filetree($single));
      }