通过文件夹迭代?

时间:2012-02-01 13:46:51

标签: php loops

我正在寻找迭代文件夹的最佳方法,并将其中的所有文件名放入一个数组中,另一个放入文件的数量。

我发现glob()是一个很好的解决方案,但在php.net上也有很多替代方案。我不确定我应该使用哪个,所以我在这里问。如果您想知道我想要使用它,那就是将所有.sql文件放在backup文件夹中并将其显示为<li>thesqlfile.sql</li>并计算所有这些文件

所以我想到了两个数组,一个是他们的名字,另一个是所有数组。那么在这种情况下哪种方法最适合迭代?

方法I:

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

方法II:

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; 
}

2 个答案:

答案 0 :(得分:3)

由于glob()已经返回一个数组,因此您根本不需要迭代它来附加到数组。你的第一种方法有点过于复杂。这完成了同样的事情:

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

答案 1 :(得分:0)

我会说第二个在文件控制方面可能更好(通过$ file_display和$ file_exclude),但也许你应该添加一个检查以确保当前文件不是名为something.typeyouwishtodisplay的目录