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
相关产品推荐
相关产品推荐

