【问题标题】:Thoughts and suggestions on my php SortFilesByDate function关于我的 php SortFilesByDate 函数的想法和建议
【发布时间】:2012-02-01 23:00:14
【问题描述】:

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

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

感谢您的宝贵时间!

【问题讨论】:

    标签: php file function sorting date


    【解决方案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;
    }
    

    【讨论】:

    • 好点,我没有考虑过值被覆盖的可能性。您能否通过将每个值存储为数组来阐明您的意思?不知道 array_values(),谢谢!
    • 知道了,这样,相同 mtime“堆栈”的文件。非常光滑。
    • 你明白了。丢失文件可能很常见,因为通常在解压缩文件时,它们都可能会在几秒钟内获得相同的 mtime,具体取决于存档中有多少文件。
    • 当然值得在函数末尾的额外循环。
    【解决方案2】:

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

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

    【讨论】:

    • 很高兴知道php内置了这种类型的函数,然后我假设你循环遍历数组?
    • 发生的唯一循环是usort 内部的,而您却看不到它。上面的代码将是函数的整个主体,不需要进一步的循环。
    • 哇,这令人印象深刻。感谢您让我意识到这一点。
    猜你喜欢
    • 2015-01-09
    • 2011-01-03
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    相关资源
    最近更新 更多