PHP 常见的一种类型错误。意思是:

你正在尝试用数组方式(例如 $var['key']$var[0])去访问一个实际上是 字符串类型 的变量。


一、举个例子说明

$data = "hello world";echo $data['key']; // ❌ 错误:Cannot access offset of type string on string

在上面,$data 是一个字符串,而不是数组。
所以用 $data['key'] 访问下标时就会触发这个错误。


 二、常见出现场景

1️⃣ 从 JSON 或数据库读取时未解码

$json = '{"name":"Tom"}';echo $json['name']; // ❌ 错误:$json 是字符串// ✅ 正确写法$arr = json_decode($json, true);echo $arr['name']; // 输出:Tom

2️⃣ 从数据库或接口返回的数据格式不符预期

$result = getDataFromAPI(); // 实际返回 "error"echo $result['data']; // ❌ 报错// ✅ 调试var_dump($result);

3️⃣ ThinkPHP / Laravel 等框架中 $request->param()input() 返回字符串

$param = input('data'); // 实际为字符串 "id=1"echo $param['id']; // ❌ 报错

✅ 修复:

$param = input('data.');

parse_str($param, $arr);echo $arr['id'];

三、如何快速定位问题

在出错的行上加上调试:

var_dump($yourVar);

确认它到底是字符串还是数组。


四、通用解决办法

问题原因解决方法
JSON 字符串未解码json_decode($str, true)
API 返回错误字符串检查返回内容格式
框架输入未数组化改为 input('param.')
数据库字段是字符串使用 unserialize()json_decode()
数组索引错误确保 $var 真的是数组

五、示例修复对比

错误代码:

$user = getUser(); // 返回字符串 "no data"echo $user['name'];

修复后:

$user = getUser();if (is_string($user)) { echo "Error: ".$user; } else { echo $user['name']; }


点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部