Мысли и предложения по моей функции php SortFilesByDate - PullRequest
0 голосов
/ 02 февраля 2012

Я довольно новичок в php и хотел бы услышать ваши мысли по поводу этой функции, которую я только что написал.Идея состоит в том, чтобы отсортировать массив файлов в хронологическом порядке от самых старых до самых новых.Посмотрите и дайте мне знать, если вы думаете, что это можно улучшить вообще:

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

Спасибо за ваше время!

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Я бы usort это, для простоты использования, вероятно, с SPLFileInfo объектами, но не строго необходимо ... Избегайте злоупотребления ключами для сортировки, если это возможнобудет часто возвращаться, чтобы кусать тебя.

usort($filearray,function($a,$b){
   return strcmp(filemtime($a),filemtime($b));
});
return $filearray;
1 голос
/ 02 февраля 2012

Если более одного файла имеют одинаковое 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...