代码之家  ›  专栏  ›  技术社区  ›  CLiown

php opendir排序

php
  •  1
  • CLiown  · 技术社区  · 15 年前

    当前正在输出目录中保存的所有文本文件:

    $directory = "polls/";
    $dir = opendir($directory);
    
    
    while (($file = readdir($dir)) !== false) {
      $filename = $directory . $file;
      $type = filetype($filename);
      if ($type == 'file') {
      $contents = file_get_contents($filename);
      list($tag, $name, $description, $text1, $text2, $text3, $date) = explode('¬', $contents);
    
      echo '<table width="500" border="1" cellpadding="4">';
      echo "<tr><td>$tag</td></tr>\n";
      echo "<tr><td>$name</td></tr>\n";
      echo "<tr><td>$description</td></tr>\n";
      echo "<tr><td>$text1</td></tr>\n";
      echo "<tr><td>$text2</td></tr>\n";
      echo "<tr><td>$text3</td></tr>\n";
      echo "<tr><td>$date</td></tr>\n";
      echo '</table>';
    
      }
    }
    closedir($dir);
    

    我想扩展这个功能,以便在输出之前对文件进行排序,文件名的格式是unixtime,所以很快就应该这样做。然后我只想在排序后输出前5个。那应该给我最新的5个。

    2 回复  |  直到 15 年前
        1
  •  2
  •   salathe    15 年前

    你可以利用 glob (对文件进行排序 提升 顺序),只需提取该文件路径数组的一部分。例如:

    $files   = glob('polls/[0-9]*.txt');
    $reverse = array_reverse($files);
    $latest  = array_slice($reverse, 0, 10);
    foreach ($latest as $file) {
        // ...
    }
    
        2
  •  0
  •   Joey    15 年前

    好吧,如果数据还没有排序,您必须构建一个文件数组,并用 sort 然后使用 array_slice 提取前五项。