ホームページ  >  記事  >  バックエンド開発  >  PHP がファイル ツリー コードを再帰的に走査する_PHP チュートリアル

PHP がファイル ツリー コードを再帰的に走査する_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 16:55:111290ブラウズ

フォルダー ツリーを再帰的にスキャンする場合、正確に言えば、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.comtru​​e

http://www.bkjia.com/PHPjc/631703.html技術記事フォルダー ツリーの再帰的スキャンの問題に関しては、正確に言えば、Glob 関数の方がパフォーマンスが優れています。 > Scandir 関数は、不可解にも ../ にあるファイルを 2 回スキャンします。つまり、ファイルが小さい場合...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。