按上次修改排序文件数组

时间:2012-11-26 20:46:23

标签: php

使用以下操作,我收集一个文件列表并显示它们。我需要能够按上次修改日期对文件进行排序。 PHP中是否有一种简单的方法或使用ZEND按上次修改的顺序排序?如果您知道更简单的方法来获取文件并使用ZEND订购它们;请告诉我。

public function imagesAction()
{
    $this->_helper->layout->disableLayout();

    $results = array();

    $handler = opendir(APPLICATION_PATH . '/../public/images/blog');

    while ($file = readdir($handler)) {
        if ($file != "." && $file != ".." && $file != '.svn') {
            $results[] = $file;
        }
    }

    closedir($handler);

    $this->view->data = $results;
}

我尝试过做

$this->view->data = ksort($results);
$this->view->data = asort($results);

但是那些只是从视图中删除整个文件列表,它们就会停止显示。

3 个答案:

答案 0 :(得分:2)

public function imagesAction()
{
    $this->_helper->layout->disableLayout();

    $results = array();

    $handler = opendir(APPLICATION_PATH . '/../public/images/blog');

    while ($file = readdir($handler)) {
        if ($file != "." && $file != ".." && $file != '.svn') {
            $results[] = array('file' => $file, 'time' => filemtime($file));
        }
    }

    closedir($handler);

    uasort($results, function($file1, $file2) {
        if ( $file1['time'] == $file2['time'] )
           return 0;
        return $file1['time'] < $file2['time'] ? -1 : 1;
    });

    $this->view->data = $results;
}

答案 1 :(得分:0)

使用上次修改日期作为密钥:

while ($file = readdir($handler)) {
    if ($file != "." && $file != ".." && $file != '.svn') {
        $s = stat($file);
        if (!is_array($results[$s['mtime']]) {
             $results[$s['mtime']] = array();
        }
        $results[$s['mtime']][] = $file;
    }
}

然后使用ksort按键排序:

ksort($results);

$results的每个项目现在都包含一系列同时修改的文件名。

答案 2 :(得分:0)

您可以使用DirectoryIterator(http://php.net/manual/en/class.directoryiterator.php)轻松迭代目录中的文件并获取每个文件的属性(包括上次修改时间)。

您可以简单地实例化迭代器,遍历它并将项目排序为您选择的数组。