我正在寻找迭代文件夹的最佳方法,并将其中的所有文件名放入一个数组中,另一个放入文件的数量。
我发现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;
}
答案 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的目录