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

PHP 7.1+ 多维数组赋值报Cannot use string offset as an array问题咨询

PHP 7.1+ 多维数组赋值报错原因

该Cannot use string offset as an array报错触发的核心原因是PHP 7.1+收紧了字符串偏移访问的限制:低版本PHP中如果对标量(尤其是字符串)类型的变量使用数组维度赋值,会静默完成隐式类型转换,7.1+版本后该操作会直接抛出致命错误。
问题的根源并非$article['object']['manual']未初始化,而是更高层级的$article['object']在代码运行过程中被意外赋值为字符串/数字等标量类型,此时哪怕单独初始化子级manual维度,访问父级的数组下标依然会触发报错。

正确实现方案

方案1:提前完整初始化所有维度

在执行赋值逻辑前,从最外层开始逐层级初始化所有需要用到的数组维度,保证每一级父元素均为数组类型:

// 逐层级初始化,避免父级为标量
$article = [];
$article['object'] = [];
$article['object']['manual'] = [];

// 执行原有赋值逻辑
if ($result['type']>0) { 
    $article['object']['type'] = $result['type']; 
}
if (strlen($result['productName'])>0) { 
    $article['object']['manual']['product'] = $result['productName']; 
}
if (strlen($result['brandName'])>0) { 
    $article['object']['manual']['brand'] = $result['brandName']; 
}

方案2:赋值前强制校验父级类型

如果无法确定前置代码是否修改过父级元素的类型,可以在赋值前增加校验逻辑,强制将父级转换为数组:

// 校验并修复父级维度类型
$article['object'] = $article['object'] ?? [];
if (!is_array($article['object'])) {
    $article['object'] = [];
}

$article['object']['manual'] = $article['object']['manual'] ?? [];
if (!is_array($article['object']['manual'])) {
    $article['object']['manual'] = [];
}
注意事项
  • 不要跳过父级维度单独初始化子级,该操作无法修复父级为标量的问题
  • 排查$article['object']相关的其他赋值逻辑,避免其被意外覆盖为标量类型

内容的提问来源于stack exchange,提问作者Mad Marvin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:06:03