为什么DirectoryIterator没有浏览php中的所有文件

时间:2012-12-28 20:04:21

标签: php

任何人都可以告诉我为什么我的代码只输出40个文件中的20个

$Files = array();
  $dir = new DirectoryIterator('./images/gallery');
  foreach($dir as $fileinfo){
    if($fileinfo->isFile()){
      $Files[$fileinfo->getMTime()] = $fileinfo->getFilename();
    }
  }
  krsort($Files);          
  foreach($Files as $file){
    echo "<a rel='fancy1' href='/images/gallery/$file'><span><img src='/images/revelsmashy.php?src=/images/gallery/$file&w=128&zc=0&q=100'></span></a>\n";
  }

编辑: 我希望根据上传的数据时间对图像进行排序,最新发布的第一个

1 个答案:

答案 0 :(得分:2)

通过文件修改时间索引数组的原始方法看起来会导致具有相同mtime值的文件覆盖以前的数组键。在某些情况下,如果您的整个目录一次被重写,所有文件可能具有相同的修改时间,因此只有 last 一次迭代将在结果数组中。

如果您需要最终按时间排序,则可以构建一个多维数组,该数组同时包含文件名和文件修改时间,然后使用usort()对其进行排序。

$dir = new DirectoryIterator('./images/gallery');
foreach($dir as $fileinfo){
  if($fileinfo->isFile()){
    // Append each file as an array with filename and filetime keys
    $Files[] = array(
      'filename' => $fileinfo->getFilename(), 
      'filetime' => $fileinfo->getMtime()
    );
  }
}

// Then perform a custom sort:
// (note: this method requires PHP 5.3. For PHP <5.3 the you have to use a named function instead.
// see the usort() docs for examples )
usort($Files, function($a, $b) {
  if ($a['filetime'] == $b['filetime']) return 0;
  return $a['filetime'] < $b['filetime'] ? -1 : 1;
});

在输出循环中,访问filename键:

foreach($Files as $file){
    echo "<a rel='fancy1' href='/images/gallery/{$file['filename']}'><span><img src='/images/revelsmashy.php?src=/images/gallery/{$file['filename']}&w=128&zc=0&q=100'></span></a>\n";
    //-----------------------------------------^^^^^^^^^^^^^^^^^^^^
}