PHP natcasesort给出了booleon错误

时间:2014-05-19 10:11:31

标签: php foreach count

我一直在尝试阅读错误并找出解决方案一段时间,我似乎无法得到它。

简而言之,下面的代码抓取了显示事件的php文件的编号列表。但是,当此目录中没有php文件时,它会显示文本,抱歉,没有即将发生的事件。

$events = glob("$_SERVER[DOCUMENT_ROOT]/assets/events/shot/*.php");

if(count($events)) {
natcasesort($events);

$i=0;
foreach($events as $event) {
if($i > 3) {
    break;
}
$event = basename($event);
include("$_SERVER[DOCUMENT_ROOT]/assets/events/shot/$event");
$i++;
};
    }

else {

echo 'Sorry, no upcoming events.';

}

我的问题是,当目录中没有php文件时,我收到错误:

Warning: natcasesort() expects parameter 1 to be array, boolean given in /home/famili23/public_html/assets/events/shot.php on line 11

Warning: Invalid argument supplied for foreach() in /home/famili23/public_html/assets/events/shot.php on line 14

我无法想象这一个。如果有人可以帮我这个,谢谢!!

1 个答案:

答案 0 :(得分:2)

glob 可能在出错时返回false(我不确定哪种情况会构成错误)。投射到数组的false将是值array(false),即具有一个条目false的数组。 count将其参数转换为数组,因此如果glob返回falsecount(false)将导致1。这就是为什么它无论如何进入条件,因为$events不是数组,以下函数都在抱怨。

由于空数组等于false,我建议你这样做:

if ($events) ...

当且仅当glob返回包含至少一个元素的数组时才会出现这种情况,并且在所有其他情况下返回false,包括空数组和false