PHP natcasesort给出booleon错误

PHP natcasesort给出booleon错误,php,foreach,count,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($

我已经试着阅读错误并找出解决方案一段时间了,我似乎无法理解它

简而言之,下面的代码获取显示事件的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
我不太明白这一点。如果有人能帮我,谢谢

glob
可能会在出错时返回
false
(我不确定哪些情况会构成错误)
false
转换到数组的值将是
array(false)
,即一个数组有一个条目
false
count
将其参数强制转换为数组,因此在
glob
返回
false
的情况下,
count(false)
将导致
1
。这就是为什么不管怎样它都会进入条件,因为
$events
不是数组,所以下面的函数会抱怨

由于空数组等于
false
,因此我建议您只需执行以下操作:

if ($events) ...

当且仅当
glob
返回一个至少包含一个元素的数组时,这种情况才成立;在所有其他情况下,包括空数组和
false
false
也可以指示空结果,因为在某些系统上,无法区分空匹配和错误@pozs是的,它说“如果没有匹配的文件,则为空数组,或者错误为FALSE”,然后是模糊的语句。所以我还是不太清楚这到底意味着什么…;)当然,这就是为什么我写它也可以表示一个空的结果。另一种可能是错误的模式,例如
foo[name*.php
,但OP的问题只存在于该目录中没有文件时,因此我猜前一种模式适用于此。很简单。
count
在没有文件时抛出脚本并返回
false
。只需删除
计数即可()
解决了我的问题,我理解原因。感谢您的帮助!