PHP -- 遍歷出目錄下所有檔案,及演算法優化
阿新 • • 發佈:2018-11-08
在想解決這個問題的時候,我也查找了很多資料。推薦給大家我個人覺得比較好的一篇:PHP遍歷檔案目錄
文中第四個演算法可以遍歷出文件夾下的所有檔案,程式碼如下:
$dir = 'E:\phpStudy\PHPTutorial\WWW'; echo '<pre>'; function listDir($dir) { if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { if ((is_dir($dir . "/" . $file)) && $file != "." && $file != "..") { echo "檔名:", "$file\n"; listDir($dir . "/" . $file . "/"); } else { if ($file != "." && $file != "..") { echo "$file\n"; } } } closedir($dh); } } } listDir($dir);
左圖:這是我設定的檔案目錄E:\phpStudy\PHPTutorial\WWW;
右圖:為頁面打印出來的部分資訊,檢測5次後,得出的耗時平均時間為:3754.5224189758毫秒。
演算法優化:
雖然這個演算法可以很好的遍歷出目中的所有檔案,但是PHP有個更好的函式可以利用:scandir()和glob();對於優化演算法較上述演算法有以下兩點優化:
1. 打印出的內容有目錄,展現更加明確;
2. 時間略有減少,速度提升。
演算法一、scandir()方法優化程式碼如下:
$dir = 'E:\phpStudy\PHPTutorial\WWW'; echo '<pre>'; function getDir1($dir) { $arr = scandir($dir); foreach ($arr as $file) { if ($file != '.' && $file != '..') { $path = $dir . '/' . $file; if (is_dir($path)) { getDir1($path); } else { echo "$path\n"; } } } } getDir1($dir);
檢測5次後,得出的耗時平均時間為:3527.3191928864毫秒。
演算法二、glob()方法優化程式碼如下:
$dir = 'E:\phpStudy\PHPTutorial\WWW'; function getDir2($dir) { foreach (glob($dir . '\*') as $file) { if (is_dir($file)) { getDir2($file); } else { echo "$file\n"; } } } getDir2($dir);
檢測5次後,得出的耗時平均時間為:3330.0499916077毫秒。
下圖是打印出的部分檔案格式:
總結:
由上可以看出:演算法二 > 演算法一 > 引用演算法
在實際應用中,我們需要指定副檔名的列舉目錄內所有檔案的話,還是推薦如下:
foreach (glob('*.檔案字尾') as $filename) {
echo $filename;
}
歡迎補充!
千而の大獅子!