【面接問題】1つのフォルダの下のすべてのファイルとサブフォルダを遍歴できる関数を書く
重点:dirディレクトリの関数に対する認知を考察する!
シナリオ1:
関数解析:
シナリオ2:
関数解析:
シナリオ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 。