フォルダー ツリーを再帰的にスキャンする場合、正確に言えば、Glob 関数の方がパフォーマンスが優れています。
> Scandir 関数は、不可解にも ../ にあるファイルを 2 回スキャンします。つまり、Xiaoxie に 2 つのファイルがある場合です。
> ../b.php チュートリアルと ../a.php では、結果がスキャン レポートに 2 回表示されますが、これは非常に奇妙です。
コードは次のとおりです |
コードをコピー |
//2010.07.25 更新 - 次のコードは無効です
$パス = '..' ;
関数 get_filetree_scandir($path){
$tree = 配列();
foreach(scandir($path) as $single){
if(is_dir('../'.$single)){
$tree = array_merge($tree,get_filetree($single));
}
他{
$tree[] = '../'.$single ;
}
}
$tree を返します。
}
print_r(get_filetree_scandir($path));
//2010.07.25 更新 - 以下は新しいコードです
$パス = './';
関数 get_filetree_scandir($path){
$結果 = 配列();
$temp = 配列();
if (!is_dir($path)||!is_readable($path)) // ディレクトリの有効性をチェックします ;
$allfiles = scandir($path); // ディレクトリ内のすべてのファイルとフォルダーを取得します
foreach ($allfiles as $filename) { //ディレクトリ内のファイルとフォルダーを走査します
if (in_array($filename,array('.','..')) // と .. を無視します。
$fullname = $path.'/'.$filename //完全なファイルパスを取得します ;
if (is_dir($fullname)) { //ディレクトリの場合、再帰を継続します
$result[$filename] = get_filetree_scandir($fullname) //再帰が開始されます ;
}
他 {
$temp[] = $filename // ファイルの場合は配列に格納します
}
}
foreach ($temp as $tmp) { //一時配列の内容を結果を保持する配列に保存します
$result[] = $tmp; //これにより、フォルダーが前に、ファイルが後ろに配置されます ;
}
$結果を返す
}
print_r(get_filetree_scandir($path));
|
http://www.bkjia.com/PHPjc/631703.htmlwww.bkjia.comtrue
http://www.bkjia.com/PHPjc/631703.html技術記事フォルダー ツリーの再帰的スキャンの問題に関しては、正確に言えば、Glob 関数の方がパフォーマンスが優れています。 > Scandir 関数は、不可解にも ../ にあるファイルを 2 回スキャンします。つまり、ファイルが小さい場合...