按PHP中的降序回显文件目录按日期排序

时间:2016-01-19 12:55:52

标签: php

好的我有一个目录,其中包含按日期命名的文件,扩展名为" .html"。

我要做的是列出目录的内容,减去文件扩展名,按日期排序最新。

我一直在摆弄以下代码几个小时。

    <?php

if ($handle = opendir('update_table_cache')) {

    while (false !== ($entry = readdir($handle))) {



        if ($entry != "." && $entry != ".." ) {

        $dirFiles[] = $entry ;
        rsort($dirFiles);
foreach($dirFiles as $entry) {

$withoutExt = preg_replace('/\\.[^.\\s]{3,4}$/', '', $entry);

            echo '<a href="http://www.example.com/update_table_cache/'.$entry.'">'.$withoutExt.'</a><br>';
            }
        }
    }

    closedir($handle);
}
?>

输出如下内容:

2016-01-18
2016-01-19
2016-01-18

应该只有一个2016-01-18,它应该在底部。为什么顶部会有额外的2016-01-18?

编辑:确定我将其更改为以下内容:

<?php

    if ($handle = opendir('update_table_cache')) {

$dirFiles[] = $entry ;
            rsort($dirFiles);
    foreach($dirFiles as $entry) {

        while (false !== ($entry = readdir($handle))) {



            if ($entry != "." && $entry != ".." ) {



    $withoutExt = preg_replace('/\\.[^.\\s]{3,4}$/', '', $entry);

                echo '<a href="http://www.example.com/update_table_cache/'.$entry.'">'.$withoutExt.'</a><br>';
                }
            }
        }

        closedir($handle);
    }
    ?>

但是这会输出:

2016-01-18
2016-01-17
2016-01-19

(我添加了另一个文件&#34; 2016-01-17.html&#34;)

2 个答案:

答案 0 :(得分:0)

你在循环中间做输出......

首先,您对一个元素进行排序并打印,然后对两个元素进行排序并打印出来。

循环后输出。

答案 1 :(得分:0)

这是有用的:

<?php

 $dir = opendir('update_table_cache');        // Open the sucker

$files = array();
while ($files[] = readdir($dir));
sort($files);
closedir($dir);

foreach ($files as $file) {

      //MANIPULATE FILENAME HERE, YOU HAVE $file...

      if ($file != "." && $file != ".." ){
      $withoutExt = preg_replace('/\\.[^.\\s]{3,4}$/', '', $file);
      echo '<a href="http://www.example.com/update_table_cache/'.$file.'">'.$withoutExt.'</a><br>';
      }
}
?>

感谢用户CBroe指出我正确的方向!