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

CodeIgniter中Undefined offset:64错误的原因及修复方案求助

解决PHP Undefined offset: 64错误的问题

先搞懂错误到底是什么意思

Undefined offset: 64 说白了就是你在尝试访问数组里不存在的索引位置。举个例子:如果你的数组只有64个元素(索引从0到63),你硬要去拿索引64的内容,PHP就会抛出这个提示——因为根本没这个位置嘛!

你的代码问题出在哪?

看你报错的第150、151行对应的循环:

$len = count($arrayguru);
for($x = 0; $len >= $x; $x++){
    $s[$x] = $idguru[$x];
    $v[$x] = $idmatpel[$x];
}

这里的循环条件$len >= $x是坑!假设$arrayguru的长度是64(也就是有64个元素),那索引范围是0~63。当$x走到64的时候,$len >= $x依然成立(64>=64),这时候你去访问$idguru[64],但这个索引根本不存在,直接触发报错。

另外你的代码还有些冗余操作:比如把$arrayguru复制到$idguru,再复制到s数组;$arraymatpel复制到$idmatpel再到v数组,完全没必要,多绕了好几层,反而容易出问题。

修复步骤

1. 修正循环条件(最直接的修复)

把循环条件改成$x < $len,这样循环只会走到索引$len-1,不会越界:

$len = count($arrayguru);
for($x = 0; $x < $len; $x++){
    $s[$x] = $idguru[$x];
    $v[$x] = $idmatpel[$x];
}

2. 简化冗余代码(更优雅的写法)

其实那个for循环完全可以删掉,直接在表格里用$idmatpel和$idguru数组就行,还能避免中间数组赋值的潜在问题。同时建议给数组加空合并运算符??,防止$no1超出数组长度时再次报错:

<td><?php echo $idmatpel[$no1] ?? ''; ?></td>
<td><?php echo $idguru[$no1] ?? ''; ?></td>

3. 初始化数组(避免潜在报错)

在代码开头给所有用到的数组初始化,防止如果$dataMatpel为空时,数组未定义导致的其他错误:

$no = 1;
$arrayguru = [];
$arraymatpel = [];
$idguru = [];
$idmatpel = [];
$n = count($dataMatpel);

额外优化建议

你的模型代码里的SQL查询可以用CodeIgniter的查询构造器,避免SQL注入风险:

function getDataGuru1($idmapel) {
    return $this->db->select('*')
                    ->from('guru')
                    ->join('matpel', 'guru.id_matpel = matpel.id_matpel')
                    ->where('matpel.id_matpel', $idmapel)
                    ->get()
                    ->result();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:08:04