遍历文件夹?
问题描述:
我正在寻找迭代通过一个文件夹的最佳方式,并将其中的所有文件名称放入一个数组,并在另一个文件的计数。遍历文件夹?
我发现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;
}
答
由于glob()
已经返回一个数组,你并不需要遍历其追加到数组的。你的第一种方法有点过于复杂。这完成同样的事情:
// Just assign the array output of glob() to a variable
$files = glob("backup/*.txt");
$num_files = count($files);
答
我要说的第二个可能是在文件控制方面(通过$ file_display和file_exclude $)更好,但也许你应该添加一个检查,以确保当前文件是不是一个名为something.typeyouwishtodisplay的目录
如果**只是需要文件名,可以使用array_map('basename',$ files)'。 – salathe 2012-02-01 14:03:08