PHP中的组和循环问题
Posted
技术标签:
【中文标题】PHP中的组和循环问题【英文标题】:Issue with group and looping in PHP 【发布时间】:2021-04-12 19:53:57 【问题描述】:我有一个通过SELECT *
进行的记录分组,它提供以下结果:
-----------------------------------------------------------------------
| Room_Location - Room_Name |
-----------------------------------------------------------------------
| Device | Technical | Ergonomic |
-----------------------------------------------------------------------
| Device_Model - Device_Type | ☐ Pass ☐ Fail | ☐ Pass ☐ Fail |
| IP_Address | | |
-----------------------------------------------------------------------
| Device_Model - Device_Type | ☐ Pass ☐ Fail | ☐ Pass ☐ Fail |
| IP_Address | | |
-----------------------------------------------------------------------
then a new table:
-----------------------------------------------------------------------
| Room_Location - Room_Name |
-----------------------------------------------------------------------
| Device | Technical | Ergonomic |
-----------------------------------------------------------------------
| Device_Model - Device_Type | ☐ Pass ☐ Fail | ☐ Pass ☐ Fail |
| IP_Address | | |
-----------------------------------------------------------------------
| Device_Model - Device_Type | ☐ Pass ☐ Fail | ☐ Pass ☐ Fail |
| IP_Address | | |
-----------------------------------------------------------------------
等等……
我知道有些人反对将代码与 html 交织在一起,但撇开这一点不谈,我遇到的是: 第一条记录的房间代码和房间名称没有出现在第一条记录的上方,而是作为第二条记录的标题出现,并向下延伸到最后一条记录。
最后一条记录实际上是上面房间记录的房间代码,在它的标题中。
它正确地对项目进行分组,只是将标题详细信息放在错误的区域,几乎就像它需要 -1 记录集但仅用于房间位置和房间名称。
我的连接代码:
$result = mysqli_query($con,"SELECT * FROM RoomList ORDER BY Room_Code ASC");
余数:
<?php
/*// Start record fail error checking
if (!$result)
printf("Error: %s\n", mysqli_error($con));
exit();
// Start record fail error checking */
if (mysqli_num_rows($result) === 0) ?>
<div id="resultserror">
No records could found for the selected view.</div>
<?php else ?>
<?php ;
$data = array();
while ($row = mysqli_fetch_assoc($result))
$itemName = $row["Room_Code"];
if (!array_key_exists($itemName, $data))
$data[$itemName] = array();
$data[$itemName][] = $row;
foreach ($data as $itemName => $rows)
?>
<table id="results" cellpadding="3" cellspacing="0">
<tr><td colspan="4"><?php echo($row['Room_Code']);?> - <?php echo($row['Room_Name']);?></td></tr>
<tr>
<th align="center">Device</th>
<th align="center">Technical</th>
<th align="center">Ergonomic</th>
</tr>
<?php
foreach ($rows as $row)
?>
<tr>
<td align='left'>
<strong>Device:</strong><?php echo($row['Device_Model']);?><br>
<strong>Type:</strong> <?php echo($row['Device_Type']);?><br>
<strong>IP Address:</strong> <?php echo($row['IP_Address']);?></td>
<td align='center'>☐ Pass<br>
☐ Fail</td>
<td align='center'>☐ Pass<br>
☐ Fail</td>
</tr>
<?php
?>
<tr>
<td colspan="7" align="center">- end of room report -</td></tr>
</table>
<?php
mysqli_close($con);
?>
<div id="reportgen"><?php echo("Report Generated: " . date("Y-m-d H:i:s")); ?></div>
<div id="reportcount"><?php echo("Record Count: " . mysqli_num_rows($result) . "");?></div>
【问题讨论】:
【参考方案1】:你的问题是在这一行:
<tr><td colspan="4"><?php echo($row['Room_Code']);?> - <?php echo($row['Room_Name']);?></td></tr>
您正在从$row
回显,当您第一次遇到此代码时,它包含从表中提取的最后一行,并且在随后的循环中包含上一个条目的最后一行。因此,您的所有标题都相对于它们应该在的位置移动了 1。您应该更改它以从当前行中获取数据:
<tr><td colspan="4"><?php echo($rows[0]['Room_Code']);?> - <?php echo($rows[0]['Room_Name']);?></td></tr>
【讨论】:
以上是关于PHP中的组和循环问题的主要内容,如果未能解决你的问题,请参考以下文章