我的新闻剧本不会按正确的顺序组织新闻

时间:2013-12-07 22:01:55

标签: php

所以,基本上是一个问题,阅读日期并按正确的顺序排序。 我不知道为什么,但它有时显示今天的日期。 你们中的任何人都可以清理代码吗?我相信它太乱了,我对php不太好。

基本上,新闻脚本的工作原理如下: 它从includes / news文件夹中读取,其中包含.txt文件的新闻。 每个新闻文件的名称都是这样的:[09.12.2013] random news title, 它需要从最新到最旧,(最新,最旧),即按时间倒序排序。

感谢任何帮助,谢谢。

<?
$files = array();
if($handle = opendir( 'includes/news' )) {
    while( $file = readdir( $handle )) {
        if ($file != '.' && $file != '..') {
            // let's check for txt extension
            $extension = substr($file, -3);
            // filename without '.txt'
            $filename = substr($file, 0, -4);
            if ($extension == 'txt')
                $files[] = $filename; // or $filename
        }
    }
    closedir($handle);
}
rsort($files);
foreach ($files as $file)
{
    // get post date
    $postdate = substr($file, 0, 10);
    $postdate = str_replace(array('[', ']'), '', $postdate);
    $todaysdate = date("d.m.y");
    if($postdate == $todaysdate) { $fromtoday = "true"; }
    $postdate = date('F jS, Y', strtotime($postdate));
    $filetitle  = substr($file, 10);
    if($fromtoday == "true") { echo "<b style=\"color: #ffb400;\">&#8987; NEW:</b>"; }
    echo '<a href="?module=news&read=' . $file . '"><span style="float:right;">' . $postdate . '</span>' . $filetitle . "</a>";
}

?>

1 个答案:

答案 0 :(得分:0)

您最好的选择可能是使用usort()

bool usort ( array &$array , callable $value_compare_func )

您必须为比较($value_compare_func)创建一个函数,该函数将解析字符串中的日期,并进行比较。最好查看文档以获取示例。

你会这样使用它:

usort($files, function($a, $b) {
        // here is the comparison logic
        // return -1,0 or 1
});

通过这种方式,您可以按字符串(或其他任何内容)使用正则表达式解析日期进行排序。

要实现相反的顺序,只需在sort函数中交换-1和1。