You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 03:32:43