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