我对php很新,很想听听你对我刚写的这个函数的想法。 我们的想法是按时间顺序从最旧到最新排序一系列文件。如果你认为它可以改进,请看看并告诉我:
function sortByDate($filearray){
$OAR = array();
foreach($filearray as $item){
$OAR[filemtime($item)] = $item;
}
ksort($OAR);
return explode(" * ", implode(" * ", $OAR ));
}
谢谢你的时间!
答案 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;