2012-02-01 133 views
0

我正在尋找迭代通過一個文件夾的最佳方式,並將其中的所有文件名稱放入一個數組,並在另一個文件的計數。遍歷文件夾?

我發現​​3210是一個很好的解決方案,但在php.net上也有很多替代方案。我不確定我應該使用哪一個,所以我在這裏問。如果您想知道我想要使用它,那麼請將.sql文件放在backup文件夾中,並將它們顯示爲<li>thesqlfile.sql</li>,並將它們全部計數。

所以我想到有兩個數組,一個是他們的名字,一個是他們所有人的數目。那麼在這種情況下哪種方法最適合迭代?

方法一:

<?php 
    $files = array(); 
    foreach (glob("backup/*.txt") as $filename) { 
     $files[]= $filename; 
    } 
    $count = sizeof($files); 
?> 

方法二:

function getfoldercontents($dir, $file_display = array(), $exclusions = array()) { 
if(!file_exists($dir)){ 
    return FALSE; 
} 

$dir_contents = scandir($dir); 
$contents = array(); 

foreach ($dir_contents as $file){ 
    $file_parts = explode('.', $file); 
    $file_type = strtolower(end($file_parts)); 

    if ($file !== '.' && $file !== '..' && in_array($file_type, $file_display) && !in_array($file, $exclusions)) { 
     $contents[] = $dir. '/'. $file;       
    } 
} 

return $contents; 
} 

回答

3

由於glob()已經返回一個數組,你並不需要遍歷其追加到數組的。你的第一種方法有點過於複雜。這完成同樣的事情:

// Just assign the array output of glob() to a variable 
$files = glob("backup/*.txt"); 
$num_files = count($files); 
+1

如果**只是需要文件名,可以使用array_map('basename',$ files)'。 – salathe 2012-02-01 14:03:08

0

我要說的第二個可能是在文件控制方面(通過$ file_display和file_exclude $)更好,但也許你應該添加一個檢查,以確保當前文件是不是一個名爲something.typeyouwishtodisplay的目錄