算法 -- 遍歷出目錄下所有文件,及算法優化&PHP

在想解決這個問題的時候,我也查找了很多資料。推薦給大家我個人覺得比較好的一篇: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;
}

歡迎補充!

千而の大獅子!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章