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

PHP报illegal offset type错误VSCode无提示的修复方法

错误原因

PHP抛出illegal offset type错误的核心规则是:PHP数组的键仅支持整数、字符串两种合法类型,传入数组、对象等类型作为键时就会触发该错误。
你代码中触发报错的原因是:mysqli_fetch_all(MYSQLI_ASSOC)返回的$option是单条数据库记录对应的关联数组,你直接把整个数组当作$series的键使用,类型不符合要求。

其他存在的代码问题

除了触发报错的数组键类型问题,你的代码还有几个会导致功能异常的问题:

  • <option>标签中写的<?php $ID ?>没有输出逻辑,ID值不会渲染到HTML上
  • select的选项值应该放在value属性中,而不是name属性
  • 当数据库查询无结果时,$options变量没有初始化,直接遍历会抛出未定义变量警告
  • select闭合标签前多了一个多余的>字符,属于HTML语法错误
修正后的完整代码
<?php 
$query = "SELECT * FROM matriculas";
$result = $con->query($query);
// 先初始化空数组,避免无查询结果时遍历报错
$options = [];
if($result->num_rows > 0){
  $options = mysqli_fetch_all($result, MYSQLI_ASSOC);
}
$series = [];
foreach ($options as $option) {
    // 数组键使用记录的唯一主键(如果你的表主键字段不是id,替换为实际字段名即可,只要是整数/字符串类型、值唯一就可以)
    $series[$option['id']] = [$option['matricula'], $option['type']];
}
?>
<select name="id">
   <option>Select matricula</option>
<?php 
  foreach ($series as $ID => $values) {
?>
    <option value="<?php echo $ID; ?>"><?php echo $values[0]; ?></option>
<?php 
  }
?>
</select>
补充说明

VSCode没有提前提示这个错误属于正常情况:默认的PHP静态语法检测不会覆盖运行时的变量类型校验,这类类型不匹配的问题只有代码实际执行时才会抛出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:09:18