使用以下操作,我收集一个文件列表并显示它们。我需要能够按上次修改日期对文件进行排序。 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);
但是那些只是从视图中删除整个文件列表,它们就会停止显示。
答案 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)轻松迭代目录中的文件并获取每个文件的属性(包括上次修改时间)。
您可以简单地实例化迭代器,遍历它并将项目排序为您选择的数组。