多维数组遍历出现Undefined offset提示的技术求助
解决PHP多维数组循环时的Undefined Offset提示
嘿,这个问题我太熟了!你遇到的Undefined offset: 10提示,根源出在循环条件的写法上,咱们一步步理清楚:
问题出在哪?
你写的循环条件是:
while($i<count($result_page[$i]))
这里有两个明显的问题:
- 当
$i增长到超过$result_page数组的最大索引时(比如你的情况是10,说明数组只有索引0-9的元素),$result_page[$i]就变成了不存在的元素,PHP自然会抛出Undefined offset的提示——因为你在访问一个不存在的数组位置。 - 你真正要做的是遍历
$result_page里的所有元素,而不是每个子数组的长度,这个逻辑完全搞反了。
两种靠谱的解决方案
方案1:用foreach遍历(最推荐,PHP数组遍历的标准姿势)
foreach会自动帮你处理数组的索引,完全不用手动管理$i,从根源避免索引越界:
if($numrows>0) { foreach($result_page as $product) { echo "<tr>"; echo "<td>" . $product['product_id'] . "</td>"; echo "<td>" . $product['product_name'] . "</td>"; echo "<td>" . $product['product_price'] . "</td>"; echo "</tr>"; } }
方案2:如果坚持用while循环,先获取数组总长度
先一次性算出$result_page的总元素数,再用它作为循环的终止条件,不要每次循环都去访问可能不存在的索引:
if($numrows>0) { $totalProducts = count($result_page); $i = 0; while($i < $totalProducts) { echo "<tr>"; echo "<td>" . $result_page[$i]['product_id'] . "</td>"; echo "<td>" . $result_page[$i]['product_name'] . "</td>"; echo "<td>" . $result_page[$i]['product_price'] . "</td>"; echo "</tr>"; $i++; } }
额外提醒
以后遍历数组的时候,优先用foreach,它不仅写法简洁,还能避免很多手动管理索引带来的bug。如果必须用for/while循环,一定要先确认数组的有效范围,别让索引超出数组的实际长度~
内容的提问来源于stack exchange,提问作者Yash M. Hanj
相关产品推荐
相关产品推荐

