PHP中SQL查询结果返回函数后出现Undefined offset错误排查
问题分析:PHP遍历SQL查询结果时的Undefined Offset错误
先理清楚你的场景:
你把SQL查询结果存在$res变量里,用print_r($res)输出的结构是:
Array ( [0] => Array ( [hoejdemeter] => 1152 [laengde] => 24120 ) )
之后把$res作为$Data传入函数,用这段代码遍历取值时触发了错误:
foreach ($Data as $value) { list ($length, $hight) = $Data; }
错误提示:Notice: Undefined offset: 0 in C:\xampp\htdocs\PhpProject1\BjergCykel1.php on line 95
问题出在两个地方:
- 遍历逻辑错误:你在循环里用了整个
$Data数组,而不是当前迭代的$value变量。foreach ($Data as $value)的作用是把$Data里的每个元素(也就是那个内层的关联数组)依次赋值给$value,你现在直接操作$Data等于完全没用到循环的迭代逻辑。 - list语法的误用:
list()是用来解析索引数组的,它会按数字索引(0、1、2...)顺序取值,但你的内层数组是关联数组,键名是字符串(hoejdemeter、laengde),没有数字索引,所以PHP找不到索引0的元素,就抛出了Undefined Offset的提示。
正确的写法
方法一:直接访问关联数组的键(最直观)
既然你的内层数组是关联数组,直接通过键名取值最清晰:
foreach ($Data as $value) { $length = $value['laengde']; $hight = $value['hoejdemeter']; // 这里可以对$length和$hight做后续处理 }
方法二:如果一定要用list()
可以先把关联数组转成索引数组,或者手动指定值的顺序:
foreach ($Data as $value) { // 方式1:用array_values转成索引数组(注意顺序是关联数组键的默认顺序) list($hight, $length) = array_values($value); // 方式2:手动指定顺序,更可控 list($length, $hight) = [$value['laengde'], $value['hoejdemeter']]; }
内容的提问来源于stack exchange,提问作者Jens Barfred
相关产品推荐
相关产品推荐

