首頁  >  文章  >  後端開發  >  如何使用 PHP 遞歸搜尋子資料夾中的檔案:Glob 與 RecursiveDirectoryIterator?

如何使用 PHP 遞歸搜尋子資料夾中的檔案:Glob 與 RecursiveDirectoryIterator?

Linda Hamilton
Linda Hamilton原創
2024-11-08 21:44:02872瀏覽

How to Recursively Search for Files in Subfolders with PHP: Glob vs. RecursiveDirectoryIterator?

PHP Glob:遞歸搜尋子資料夾中的檔案

掃描伺服器中的檔案時,經常需要將搜尋擴展到根資料夾之外以包含子資料夾和子子資料夾。以下是如何使用 PHP 的 glob 函數和 RecursiveDirectoryIterator 來實現此目的。

帶遞歸的 Glob

Glob 透過 glob() 函數提供有限形式的遞歸搜尋。但是,它缺乏對 GLOB_BRACE 等某些選項的支援。為了克服這個問題,您可以使用自訂函數rglob() 遞歸遍歷目錄結構並傳回符合檔案的合併陣列:

function rglob($pattern, $flags = 0) {
    $files = glob($pattern, $flags); 
    foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir) {
        $files = array_merge(
            [],
            ...[$files, rglob($dir . "/" . basename($pattern), $flags)]
        );
    }
    return $files;
}

RecursiveDirectoryIterator

遞歸搜尋的另一個選項是RecursiveDirectoryIteratoriveDirectoryIterator類。它提供了更強大和可擴展的方法:

function rsearch($folder, $regPattern) {
    $dir = new RecursiveDirectoryIterator($folder);
    $ite = new RecursiveIteratorIterator($dir);
    $files = new RegexIterator($ite, $regPattern, RegexIterator::GET_MATCH);
    $fileList = array();
    foreach($files as $file) {
        $fileList = array_merge($fileList, $file);
    }
    return $fileList;
}

比較和用法

rglob() 和 rsearch() 都可以執行遞歸文件搜尋。 RecursiveDirectoryIterator 透過其可擴充性選項提供了額外的靈活性。兩者之間的選擇取決於您的特定要求和所需的控制等級。

以上是如何使用 PHP 遞歸搜尋子資料夾中的檔案:Glob 與 RecursiveDirectoryIterator?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn