2016-12-09 37 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