1

使用以下操作,我收集文件列表并显示它们。我需要能够按上次修改日期对文件进行排序。在 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);

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

4

3 回答 3

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;
}
于 2012-11-26T20:52:02.623 回答
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);

now 的每个项目都$results包含一个同时修改的文件名数组。

于 2012-11-26T20:51:07.693 回答
0

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

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

于 2012-11-26T20:52:16.087 回答