PHP多维数组遍历问题:如何按日期显示全部数据而非仅最后结果
按日期打印数组全部结果的解决方案
你的问题出在没有遍历所有日期分组,且循环条件逻辑错误,导致只能输出单个日期的内容(甚至可能出现索引越界错误)。
正确实现代码(推荐foreach遍历,更简洁安全)
// 遍历每个日期分组 foreach ($combinedResults as $date => $dailyExercises) { // 输出日期标题 echo "<h2>{$date}</h2>"; // 遍历该日期下的所有练习项 foreach ($dailyExercises as $item) { echo "<p>练习:{$item['Exercise']}</p>"; echo "<p>链接:{$item['url']}</p>"; } }
若坚持使用for循环(修正逻辑)
如果习惯用for循环,需要先获取每个日期下的练习总数,同时遍历所有日期:
// 先获取所有日期的键名 $allDates = array_keys($combinedResults); foreach ($allDates as $date) { echo "<h2>{$date}</h2>"; $exerciseNum = count($combinedResults[$date]); // 循环条件改为 $x < $exerciseNum(索引从0到总数-1) for ($x = 0; $x < $exerciseNum; $x++) { echo "<br>" . $combinedResults[$date][$x]['Exercise']; echo "<br>" . $combinedResults[$date][$x]['url'] . "<br>"; } }
原代码的问题分析
- 未遍历所有日期:原代码只针对单个
$date变量,没有遍历外层数组的所有日期键,自然只能输出某一个日期的内容。 - 循环条件错误:
$x<=count($combinedResults[$date][$x])中,count($combinedResults[$date][$x])是取单个练习数组的长度(固定为2),但实际应该取该日期下所有练习的总数count($combinedResults[$date]),且循环条件应该用<而非<=,避免索引越界。
内容的提问来源于stack exchange,提问作者George Kapellakis
相关产品推荐
相关产品推荐

