【面接問題】1つのフォルダの下のすべてのファイルとサブフォルダを遍歴できる関数を書く

2500 ワード

重点:dirディレクトリの関数に対する認知を考察する!
シナリオ1:
 function my_dir($dir){
    $files=array();
    if(@$handle=opendir($dir)){//        @,    warning    :)
        while(($file=readdir($handle))!==false){
            if($file!=".." && $file!="."){//     ;
                if(is_dir($dir."/".$file)){//       ,     
                    $files[$file]=my_dir($dir."/".$file);//  
                }else{//             ;
                    $files[]=$file;
                }
 
            }
        }
        closedir($handle);
        return $files;
    }
 }
//     
 $q_array=my_dir('E:/115');
 print_r($q_array);

関数解析:
opendir --       
  
resource opendir ( string path)      resource
        ,        closedir(),readdir()   rewinddir()    。
   path                                ,opendir()    FALSE       E_WARNING     PHP     。    opendir()     “@”            。


readdir --           
  
string readdir ( resource dir_handle)
              。               。
           readdir()       。               (        -            )FALSE,              FALSE          (        “0”)。


is_dir --               
  
bool is_dir ( string filename)
                TRUE。   filename        ,                。
 :           。       clearstatcache()。
 :             ,                    。

 
シナリオ2:
function dirToArray($dir) { 
   $result = array(); 
   $cdir = scandir($dir); 
   foreach ($cdir as $key => $value) { 
      if (!in_array($value,array(".","..")))  { 
         if (is_dir($dir . DIRECTORY_SEPARATOR . $value)) { 
            $result[$value] = dirToArray($dir . DIRECTORY_SEPARATOR . $value); 
         } else { 
            $result[] = $value; 
         } 
      } 
   } 
   
   return $result; 
} 

関数解析:
scandir —              
array scandir ( string $directory [, int $sorting_order [, resource $context ]] )
     array,    directory        。

             array,        FALSE。   directory      ,       FALSE       E_WARNING     。