2014-12-03 51 views
0

獲得目錄中的所有文件名,我發現這個代碼通過文件夾進行迭代:PHP - 通過模式

if (is_dir($dir)) { 
    if ($dh = opendir($dir)) { 
    while (($file = readdir($dh)) !== false) { 

      ??????????? 

    } 
    closedir($dh); 
} 

文件具有類似名稱:project-1-0, project-1-1, project-5-14, project-6-21 ... 現在我需要過濾的所有文件,並只得到這是開始與「項目1- ??」我怎麼能這樣做,我應該使用blob()函數?有沒有簡單的例子?即時通訊使用laravel所以也許有一個函數,但我找不到有用的東西

+0

使用$文件檢查每個名稱? – 2014-12-03 08:13:39

+2

'glob()'是要走的路 – Rizier123 2014-12-03 08:15:35

+0

[PHP目錄中特定文件列表]的可能重複(http://stackoverflow.com/questions/3062154/php-list-of-specific-files-in-一個目錄)。但使用最多的投票答案。 – sectus 2014-12-03 08:16:58

回答

0

glob是非常你想在這裏。然而,正如你似乎在使用Laravel(由於標籤),你應該看看Laravel的FileSystem類(使用File門面):4.2 docs。它爲標準的PHP文件函數提供了一個包裝器(儘管實際上並沒有爲你的目的添加任何東西)。

你可以做這樣的東西:

if (File::isDirectory($dir)) { 
    foreach (File::glob($dir.'/project-1-*') as $projectDir) { 
     $actualDir = substr($projectDir, strlen($dir) + 1); // trim the base directory 
    } 
} 

但是,如果你想要一個更強大的文件查找系統,你可以使用的Symfony的Finder組件(docs),其中已經包含在你的項目,如果你」重新使用Laravel(如一些 Laravel Filesystem方法使用它),你就可以做這樣的事情:

$dirs = Finder::create()->in($dir)->depth(0)->directories()->name('project-1-*'); 
// or, if you want to use regex, this should work 
$dirs = Finder::create()->in($dir)->depth(0)->directories()->name('/^project-1-/'); 

現在,查找返回迭代器,這樣你就可以使用PHP的iterator_to_array函數將它變成一個數組,如果你需要將它作爲一個數組來使用(也就是說,如果你不需要它作爲一個數組,例如foreach),那麼迭代器會更好。