PHP7.4下phpBB2x数组count检测返回0时的报错问题求助
解决PHP 7.4中count()的警告问题
问题原因
PHP 7.4开始严格限制count()的参数必须是数组或实现了Countable接口的对象。当没有版主时,$forum_moderators[$forum_id]可能是null、未定义或者非数组类型,这时候调用count()就会触发警告。
修复方案
这里提供几种简单易上手的修复方式,适合新手操作:
方式一:先初始化变量为数组
// 确保变量始终是数组,不存在或为空时用空数组兜底 $moderators = $forum_moderators[$forum_id] ?? []; // 额外校验防止非数组类型 if (!is_array($moderators)) { $moderators = []; } if (count($moderators) > 0) { $l_moderators = (count($moderators) == 1) ? $lang['Moderator'] : $lang['Moderators']; $moderator_list = implode(', ', $moderators); } else { $l_moderators = ' '; $moderator_list = ' '; }
$forum_moderators[$forum_id] ?? []:用空合并运算符处理,若目标变量不存在或为null,直接替换成空数组is_array($moderators):确保变量是数组,避免其他非可计数类型触发报错
方式二:在count前做类型校验
// 先检查变量存在且是数组,再执行count判断 if (isset($forum_moderators[$forum_id]) && is_array($forum_moderators[$forum_id]) && count($forum_moderators[$forum_id]) > 0) { $l_moderators = (count($forum_moderators[$forum_id]) == 1) ? $lang['Moderator'] : $lang['Moderators']; $moderator_list = implode(', ', $forum_moderators[$forum_id]); } else { $l_moderators = ' '; $moderator_list = ' '; }
isset($forum_moderators[$forum_id]):避免因数组键未定义触发额外警告is_array(...):提前确保参数符合count()的要求
可选优化:减少重复count调用
如果不想多次调用count(),可以把计数结果存起来:
$moderators = $forum_moderators[$forum_id] ?? []; // 用is_countable判断是否可计数,兼容数组和Countable对象 $moderator_count = is_countable($moderators) ? count($moderators) : 0; if ($moderator_count > 0) { $l_moderators = ($moderator_count == 1) ? $lang['Moderator'] : $lang['Moderators']; $moderator_list = implode(', ', $moderators); } else { $l_moderators = ' '; $moderator_list = ' '; }
内容的提问来源于stack exchange,提问作者JWI1965
相关产品推荐
相关产品推荐

