【问题标题】:sort folders by time php按时间排序文件夹php
【发布时间】:2012-11-07 09:15:42
【问题描述】:

此代码显示文件夹列表。

如何按时间(上次更改)对这些文件夹进行排序?

function folderlist(){
  $startdir = './';
  $ignoredDirectory[] = '.'; 
  $ignoredDirectory[] = '..';
   if (is_dir($startdir)){
       if ($dh = opendir($startdir)){
           while (($folder = readdir($dh)) !== false){
               if (!(array_search($folder,$ignoredDirectory) > -1)){
                 if (filetype($startdir . $folder) == "dir"){
                       $directorylist[$startdir . $folder]['name'] = $folder;
                       $directorylist[$startdir . $folder]['path'] = $startdir;
                   }
               }
           }
           closedir($dh);
       }
   }
return($directorylist);
}

$folders = folderlist();
    foreach ($folders as $folder){
    $path = $folder['path'];
    $name = $folder['name'];

echo '<li><a href="' .$path .'index.php?imgdir=' .$name . '" class="style1"><font face="Tahoma" class="ws8"><B>' . $name . '</B></a><br /></li>';
  }
?>

【问题讨论】:

  • 这里应该有一个问题,但是语法差,没有标点符号,很难找到。

标签: php subdirectory dir


【解决方案1】:

您必须在您的$directoryList[] 中包含filemtime(),然后按mtime 对您的数组进行排序。

function cmp_mtime_reverse($a, $b) {
    if ($a['mtime'] == $b['mtime'])
        return 0;

    if ($a['mtime'] > $b['mtime'])
        return -1;

    return 1;
}

function folderlist() {
    $startdir = './';
    $ignoredDirectory[] = '.'; 
    $ignoredDirectory[] = '..';
    if (is_dir($startdir)) {
        if ($dh = opendir($startdir)) {
            while (($folder = readdir($dh)) !== false) {
                if (!(array_search($folder,$ignoredDirectory) > -1)) {
                    if (filetype($startdir . $folder) == "dir") {
                        $mtime = filemtime($startdir . $folder);
                        $directorylist[$startdir . $folder]['name'] = $folder;
                        $directorylist[$startdir . $folder]['path'] = $startdir;
                        $directorylist[$startdir . $folder]['mtime'] = $mtime;
                        $directorylist[$startdir . $folder]['files'] = count_files($startdir . $folder);
                    }
                }
            }

            closedir($dh);
        }
    }

    uasort($directorylist, 'cmp_mtime_reverse');
    return $directorylist;
}

请参阅Sorting Arraysfilemtime 了解更多信息。

统计文件夹内的文件数

function count_files($startdir) {
    $ignoredDirectory[] = '.'; 
    $ignoredDirectory[] = '..';
    $n = 0;
    if ($dh = opendir($startdir)) {
        while (($file = readdir($dh)) !== false) {
            if (!(array_search($file, $ignoredDirectory) > -1)) {
                $n++;
            }
        }

        closedir($dh);
    }

    return $n++;
}

然后在你的函数中添加一个条目folderlist()

$directorylist[$startdir . $folder]['files'] = count_files($startdir . $folder);

【讨论】:

  • @user1835767 我添加了你的完整示例。
  • olaf 我想要一个文件夹内的文件计数我如何在此代码示例文件夹x(23 个文件)文件夹z(2 个文件)中进行编辑
  • @user1835767 查看我更新的帖子。我还修改了folderList(),因为在以前的版本中,两个具有相同 mtime 的文件夹将显示为一个。
  • 你的第一个代码是完美的,我认为这个代码中的最新文件夹显示在最后
  • @user1835767 我修复了排序顺序并将附加行添加到folderList()
猜你喜欢
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 2012-08-16
  • 1970-01-01
  • 2011-11-07
  • 2015-05-22
相关资源
最近更新 更多