在按时间排序后限制最大结果

时间:2011-05-23 06:38:45

标签: php sorting glob

我想限制在我将文件记录在目录中并按时间排序之后返回的结果。如果目录中没有文件,我还想包含一个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?

3 个答案:

答案 0 :(得分:1)

当目录中没有文件时,

glob返回一个空数组。这意味着,file_exists将无用,就好像你有一个来自glob的值,它就会存在。

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

答案 1 :(得分:1)

$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)*/
}

答案 2 :(得分:0)

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

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

}