问题描述
|
在将文件放在目录中并按时间对它们排序之后,我想限制返回的结果。并且,以防万一目录中没有文件,我还要添加一个“ 0”短语。这是到目前为止的代码。
$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?
解决方法
如果目录中没有文件,则glob返回一个空数组。这意味着file_exists将是无用的,就好像您从glob中获得一个值一样,该值将存在。
如果glob某种程度上失败了,它将返回false。如果发生这种情况,您的脚本将引发一些错误。尝试在使用is_array的foreach之前检查数组。
,
$limit=5;
$list = glob(\'items/*.html\');
usort(
$list,create_function(\'$a,$b\',\'return filemtime($a) < filemtime($b);\')
);
$list=array_slice($list,$limit);
foreach($list as $file) {
include $file;
}
此处实际上不需要执行file_exists()
查询,因为如果glob
找到了它,则该查询应该存在。您可能想做一个is_readable()
,在这种情况下,您可以这样重写它:
$limit=5;
$list = glob(\'items/*.html\');
usort(
$list,\'return filemtime($a) < filemtime($b);\')
);
$i=0;
foreach($list as $file) {
if ($i < $limit && is_readable($file)) {
include $file;
$i++;
}
}
您可能还想添加检查“ 6”是否由于某种原因而失败。
$list = glob(\'items/*.html\');
if ($list===false) {
/*handle error (or simply $list=array() if you don\'t care)*/
}
array_slice()
is_read()
,尝试(最多包含5个文件)
foreach($list as $k=>$v)
{
if($k<5 && file_exists($v))
include_once $file;
else
break;
}