PHP readdir() 没有按顺序返回文件
PHP readdir() not returning files in order
我有以下代码 运行 列出目录中的文件。我想通过某种方式对输出进行排序。最好是文件名或上传日期。这甚至可能吗?
<?php
if ($handle = opendir('./xyz')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$thelist .= '<a href="./abc/xyz/'.$file.'">'.$file.'</a><br>';
}
}
closedir($handle);
}
?>
<h1>List of files:</h1>
<ul><?php echo $thelist; ?></ul>
编辑:
带有更新的新代码。
<?php
array_multisort(array_map('filectime', $files = glob('./xyz/*.*')), SORT_DEC, $files);
?>
<h1>List of files:</h1>
<ul><?php foreach($files as $file) {
echo '<a href="./abc/'.$file.'">'.$file.'</a><br>';
}
?></ul>
您是否尝试过对数组中的名称进行某种转换,然后尝试排序?...请参阅:这是一个基本的排序函数
<?php
$cars = array("Volvo", "BMW", "Toyota");
sort($cars);
?>
您不能使用 readdir
排序,它会按照它们在文件系统中的存储顺序读取它们。您可以将它们读入数组并对其进行排序。 array_multisort
效果很好,您可以用其他函数替换 filectime
:
array_multisort(array_map('filectime', $files = glob('./xyz/*.*')),
SORT_ASC, $files);
这会将所有文件放入数组 $files
,映射到 filectime
以获取时间,对其进行排序,然后对 $files
数组进行排序.
对于字母顺序只需在 glob
之后使用 sort
或 rsort
。
获得排序后的数组后,只需循环它并按原样显示或构建字符串:
foreach($files as $file) {
echo '<a href="./abc/xyz/'.$file.'">'.basename($file).'</a><br>';
}
我有以下代码 运行 列出目录中的文件。我想通过某种方式对输出进行排序。最好是文件名或上传日期。这甚至可能吗?
<?php
if ($handle = opendir('./xyz')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$thelist .= '<a href="./abc/xyz/'.$file.'">'.$file.'</a><br>';
}
}
closedir($handle);
}
?>
<h1>List of files:</h1>
<ul><?php echo $thelist; ?></ul>
编辑: 带有更新的新代码。
<?php
array_multisort(array_map('filectime', $files = glob('./xyz/*.*')), SORT_DEC, $files);
?>
<h1>List of files:</h1>
<ul><?php foreach($files as $file) {
echo '<a href="./abc/'.$file.'">'.$file.'</a><br>';
}
?></ul>
您是否尝试过对数组中的名称进行某种转换,然后尝试排序?...请参阅:这是一个基本的排序函数
<?php
$cars = array("Volvo", "BMW", "Toyota");
sort($cars);
?>
您不能使用 readdir
排序,它会按照它们在文件系统中的存储顺序读取它们。您可以将它们读入数组并对其进行排序。 array_multisort
效果很好,您可以用其他函数替换 filectime
:
array_multisort(array_map('filectime', $files = glob('./xyz/*.*')),
SORT_ASC, $files);
这会将所有文件放入数组
$files
,映射到filectime
以获取时间,对其进行排序,然后对$files
数组进行排序.对于字母顺序只需在
glob
之后使用sort
或rsort
。
获得排序后的数组后,只需循环它并按原样显示或构建字符串:
foreach($files as $file) {
echo '<a href="./abc/xyz/'.$file.'">'.basename($file).'</a><br>';
}