为PHP编写DirectoryIterator的最有效方法

时间:2016-12-09 11:33:38

标签: php regex loops pdf

我目前在PHP中使用此代码:

// RETURN FILE NAMES FROM VAULT INTO ARRAYS
    $vault_folder = "\\\\namespace\\namespace\\folder\\folder\\folder\\folder\\";
    foreach (new DirectoryIterator($vault_folder) as $fileInfo) {
        if (strtolower(pathinfo($fileInfo, PATHINFO_EXTENSION)) == "pdf") {
            if($fileInfo->isDot() || !$fileInfo->isFile()) continue;
            $files[] = $fileInfo->getFilename();
        };
    }
    arsort($files);

我想知道的是,这是否是撰写此声明的最有效方式。

目前,它正在搜索网络位置“$vault_folder并将所有文件名存储到数组$files中。

该文件夹包含多个文件,我只希望它将PDF存储在$files数组中,因此:

if (strtolower(pathinfo($fileInfo, PATHINFO_EXTENSION)) == "pdf") 

strtolower被列为为我们创建部分PDF文件的公司之一,将文件保存为.PDF而非.pdf。它还需要在代码中稍后链接回文件,因此需要将其存储在正确的大小写中。

返回7k文件需要7秒钟,给予或接受!

1 个答案:

答案 0 :(得分:1)

尝试使用glob(),它可能比在自定义循环中实现逻辑要快一些:

$files = glob('\\\\namespace\\namespace\\folder\\folder\\folder\\folder\\*.{pdf,PDF}', GLOB_BRACE);

关于您当前的实施,SplFileInfo已经有了获取扩展程序的方法:getExtension()