【问题标题】:Limit Max Results after glob sort by time按时间排序后限制最大结果
【发布时间】:2011-05-23 06:38:44
【问题描述】:

我想限制在我将文件放入目录中并按时间排序后返回的结果。如果目录中没有文件,我还想包含一个if file exists 短语。这是到目前为止的代码。

$list = glob('items/*.html');
usort(
   $list,
   create_function('$a,$b', 'return filemtime($a) < filemtime($b);')
);


foreach($list as $file)
{
    include $file;
}

现在我猜,我大概可以这样处理if (file_exists()) 部分:

foreach($list as $file)
{
 if (file_exists($file)) {
    include $file;}
}

没有抛出错误的部分,但我在哪里进行最多 5 或 7 的计数?

【问题讨论】:

    标签: php sorting glob


    【解决方案1】:

    glob 在目录中没有文件时返回一个空数组。这意味着,file_exists 将毫无用处,就好像你有一个来自 glob 的值一样,它会存在。

    如果 glob 以某种方式失败,它将返回 false。如果发生这种情况,你的脚本会抛出一些错误。尝试使用 is_array 在 foreach 之前检查数组。

    【讨论】:

      【解决方案2】:
      $limit=5;
      $list = glob('items/*.html');
      usort(
         $list,
         create_function('$a,$b', 'return filemtime($a) < filemtime($b);')
      );  
      
      $list=array_slice($list, 0, $limit);
      
      foreach($list as $file) {
          include $file;
      }
      

      这里实际上不需要进行file_exists() 查询,因为如果glob 找到它,它应该存在。不过,您可能想做一个is_readable(),在这种情况下,您可以像这样重写它:

      $limit=5;
      $list = glob('items/*.html');
      usort(
         $list,
         create_function('$a,$b', 'return filemtime($a) < filemtime($b);')
      );  
      
      $i=0;    
      foreach($list as $file) {
          if ($i < $limit && is_readable($file)) {
               include $file;
               $i++;
          }
      }
      

      如果glob 因某种原因失败,您可能还想添加检查。

      $list = glob('items/*.html');
      if ($list===false) {
          /*handle error (or simply $list=array() if you don't care)*/
      }
      

      【讨论】:

      • 嗨 Bazmegakapa,感谢您的回答。我是否正确假设如果我想添加检查以查看 glob 是否由于某种原因失败,我可以执行以下操作: if ($list===false) {} else {usort(...}?
      • @Dave 是的,这是一种可能的方法,非常好。
      • 终于有机会对其进行测试,因为我在将文件放入项目文件夹的代码中遇到了问题。完美运行,谢谢。
      【解决方案3】:

      尝试(最多包含 5 个文件)

      foreach($list as $k=>$v)
      {
        if($k<5 && file_exists($v))
          include_once $file;
        else
            break;
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-14
        • 2018-07-18
        • 2015-05-30
        • 2021-05-23
        • 2017-02-19
        • 1970-01-01
        相关资源
        最近更新 更多