我正在读取目录中的所有目录和文件,并希望按字母顺序对文件进行排序。
if ($handle = opendir($dir)) {
while (false !== ($file = readdir($handle))) {
$files = array($file);
sort($files);
$clength = count($files);
for($x = 0; $x < $clength; $x++) {
echo $files[$x];
echo "<br>";
}
上面的代码向我输出所有目录和文件,但没有按字母顺序对它们进行排序。我在做什么错了?
答案 0 :(得分:3)
您必须使用这个。
\subsection*{Subsection Title}
if ($handle = opendir($dir)) {
while (false !== ($file = readdir($handle))) {
$files[] = $file;
}
sort($files);
$clength = count($files);
for ($x = 0; $x < $clength; $x++) {
echo $files[$x];
echo "<br>";
}
}
答案 1 :(得分:3)
要回答您的问题,您需要首先收集所有文件,然后立即对其进行排序。因此您的代码看起来像-
<?php
while (false !== ($file = readdir($handle))) {
$files[] = $file;
}
sort($files);
但是,更好的选择是只使用scandir(),它会向您返回目录中的文件列表(包括文件夹),然后可以对它们进行相应的排序。
我使用了usort(),以按字母顺序对文件排序,忽略了大写或小写,同时保留了文件名的原始表示形式。
代码:
<?php
$files = array_diff(scandir(YOUR_DIRECTORY_PATH_HERE),array(".",".."));
usort($files,function($file1,$file2){
return strcmp(strtolower($file1),strtolower($file2));
});
print_r($files);
.
结果中包含的..
和scandir().