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

PHP8.1升级后in_array报错:参数2应为数组却传入布尔值

解决PHP 8.1升级后in_array()的TypeError问题(ACF场景)

问题原因

  1. PHP版本类型校验差异:PHP 8.1对函数参数类型的校验更严格,in_array()要求第二个参数必须是数组;而PHP 7.4会自动将布尔值隐式转换为数组(false转为空数组),所以之前不会触发错误。
  2. ACF函数返回值特性:你看到的Array ( [0] => 1 )是字段有值时的正常输出,但当子字段不存在、未设置值,或者在ACF循环(如repeater、flexible content)外部调用get_sub_field()时,该函数会返回false,这就导致in_array()接收到布尔值参数,触发TypeError。

最优解决方法

方法1:强制确保参数为数组(推荐)

通过默认值处理,让get_sub_field()的返回值始终是数组,避免类型错误:

// 用空数组作为默认值,确保$categories始终是数组类型
$categories = get_sub_field('category') ?: [];
if (in_array($cat->cat_ID, $categories)) {
    // 你的业务逻辑代码
}

方法2:先判断类型再执行逻辑

先检查返回值是否为数组,再调用in_array():

$categories = get_sub_field('category');
// 先验证类型,再执行in_array判断
if (is_array($categories) && in_array($cat->cat_ID, $categories)) {
    // 你的业务逻辑代码
}

额外检查点

确认get_sub_field('category')的调用上下文:必须在ACF的循环字段(如repeater)内部调用,如果是顶级字段,应该改用get_field('category');同时检查字段名称是否拼写正确,避免因字段不存在返回false。

内容的提问来源于stack exchange,提问作者Mathew Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:22:10