繁体   English   中英

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>

您无法使用readdir进行排序,因为readdir会按照它们存储在文件系统中的顺序来读取它们。 您可以将它们读入数组并进行排序。 array_multisort效果很好,您可以用其他函数替换filectime

array_multisort(array_map('filectime', $files = glob('./xyz/*.*')),
                SORT_ASC, $files);
  • 这会将所有文件放入$files数组中,映射到filectime以获取时间,对其进行排序,然后对$files数组进行排序。

  • 对于字母,只需在glob之后使用sortrsort

拥有排序后的数组后,就可以对其进行循环并按原样显示或构建您的字符串:

foreach($files as $file) {
    echo '<a href="./abc/xyz/'.$file.'">'.basename($file).'</a><br>';
}

您是否尝试过使用数组中名称的一种转换形式,并在此之后尝试进行排序?...参见:这是基本的排序功能

<?php $cars = array("Volvo", "BMW", "Toyota"); sort($cars); ?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM