关于我的php SortFilesByDate函数的想法和建议

时间:2012-02-01 23:00:14

标签: php file function sorting date

我对php很新,很想听听你对我刚写的这个函数的想法。 我们的想法是按时间顺序从最旧到最新排序一系列文件。如果你认为它可以改进,请看看并告诉我:

function sortByDate($filearray){
    $OAR = array();
    foreach($filearray as $item){
        $OAR[filemtime($item)] = $item;
        }
    ksort($OAR);
    return explode(" * ", implode(" * ", $OAR ));
    }

谢谢你的时间!

2 个答案:

答案 0 :(得分:1)

如果多个文件具有相同的mtime,它将覆盖$OAR数组中的该文件。而是将每个值存储为一个文件数组来解决该问题。

这句话return explode(" * ", implode(" * ", $OAR ));似乎可以用return array_values($OAR);代替。通过我提到的上述调整,你可能需要遍历$ OAR数组并将每组值推送到一个新的数组并返回它。

编辑:这是一个例子。

function sortByDate($filearray){
    $OAR = array();
    $sorted = array();

    foreach($filearray as $item){
        $mtime = filemtime($item);
        if (!isset($OAR[$mtime])) $OAR[$mtime] = array();

        $OAR[$mtime][] = $item;  // push $item to the array for this mtime
    }

    ksort($OAR);

    foreach($OAR as $key => $values) {
        if (sizeof($values) > 1) sort($values); // sort by name
        foreach($values as $file) {
            $return[] = $file;
        }
    }

    return $return;
}

答案 1 :(得分:1)

我会usort它,为了便于使用,可能与SPLFileInfo个对象一起使用,但并非绝对必要......如果可以,请避免滥用键进行排序,它会经常回来咬你。

usort($filearray,function($a,$b){
   return strcmp(filemtime($a),filemtime($b));
});
return $filearray;