PHP动态透视表无法输出Response值问题求助
问题根源分析
你的透视表网格无法显示Response内容,核心原因是数组索引完全不匹配:
- 构建
$pivotData时,第二层使用Homework_assign_id作为键,但后续遍历列时,你用作业标题($column)去索引$rowData,两者没有关联关系,自然找不到对应内容。 - 你将
$columns转成纯值数组(array_values($columns)),丢失了Homework_id与作业标题的关联,无法通过标题反向定位到对应的作业记录。
修正方案
- 调整
$pivotData结构,用Homework_id作为第二层键(透视表的列按作业划分,每个用户对应每个作业的提交记录)。 - 保留
$columns的键值对(不使用array_values),遍历列时同时获取Homework_id和作业标题。 - 遍历列时,用
Homework_id而非标题去索引$rowData,匹配对应的Response内容。
修正后的代码
<?php $class_id = 34; $Topic_id = 113; // Actual Query that outputs all the desired results correctly on MySQL $query = "SELECT Homework.Homework_title, Class_List.Class_List_id, Class_List.class_id, Class_List.user_id, Homework_Assign.Homework_assign_id, Homework_Assign.Completed, Homework_Assign.Response, Homework_Assign.Class_List_id, Homework_Assign.Homework_id, User_Accounts_.user_id, User_Accounts_.firstname, User_Accounts_.lastname, Homework.Topic_id FROM Homework, Class_List, Homework_Assign, User_Accounts_ WHERE Class_List.Class_List_id=Homework_Assign.Class_List_id AND User_Accounts_.user_id=Class_List.user_id AND Class_List.class_id=? AND Homework.Homework_id=Homework_Assign.Homework_id AND Homework.Topic_id=? ORDER BY User_Accounts_.firstname ASC"; // Prepared Statments $stmt = $conn->prepare($query); $stmt->bind_param("ii", $class_id, $Topic_id); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { // Fetch data and build the pivot table $pivotData = array(); $columns = array(); while ($row = $result->fetch_assoc()) { // 用Homework_id作为第二层键,关联到对应的作业 $userName = $row['firstname'] . ' ' . $row['lastname']; $homeworkId = $row['Homework_id']; $pivotData[$userName][$homeworkId]['Response'] = $row['Response']; // 保留Homework_id与标题的关联 $columns[$homeworkId] = $row['Homework_title']; } // Sort columns in ascending order by Homework_id ksort($columns); // Display the pivot table echo '<table border="1"><tr><th></th>'; foreach ($columns as $homeworkId => $title) { echo '<th>' . $title . '</th>'; } echo '</tr>'; foreach ($pivotData as $rowKey => $rowData) { echo '<tr><td>' . $rowKey . '</td>'; foreach ($columns as $homeworkId => $title) { echo '<td>'; // 用Homework_id去索引rowData,匹配对应的Response if (isset($rowData[$homeworkId]['Response'])) { echo 'Response: ' . $rowData[$homeworkId]['Response']; } else { echo 'No response'; } echo '</td>'; } echo '</tr>'; } echo '</table>'; } else { echo "No results found."; } ?>
内容的提问来源于stack exchange,提问作者PythonHelp
相关产品推荐
相关产品推荐

