2016-12-09 34 views
0

的最有效的方法我目前在PHP这样的代码:写DirectoryIterator为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

尝试使用glob(),这可能是有点快于定制循环实现逻辑:

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

关于你的当前实现,SplFileInfo已经有一个方法来获得扩展:getExtension()

+0

glob似乎是一个很好的测试函数。但是,上述声明将不包括.PDF和.pdf文件,它只会将.pdf文件添加到$ files数组中 – bepster

+0

已更新答案以支持* .pdf *和* .PDF *(假设您不需要像* .Pdf *或* .pDf *)。 – ShiraNai7

+0

GLOB似乎返回结果慢我的查询平均16secs和GLOB平均23secs,我要建立我的文件名到一个SQL表,并以这种方式链接,因为这将更有效 – bepster