You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Location ID变化时为PHP生成的表格添加换行?

问题

我有一个包含数百条记录的FIDS_Hardware数据表,每条记录都带有Location ID。目前通过以下SQL语句查询数据:

SELECT LocationID, deviceName, companyname, record_ID,location, location,orderby FROM FIDS_Hardware WHERE deviceTypeCode = 5 AND monitor = 1 ORDER BY hotelID ASC, orderby ASC

并使用PHP代码生成HTML表格,当前逻辑是每5个单元格换行。我希望实现当Location ID发生变化时,表格自动开启新行。现有PHP代码如下:

$Limit2 = 5;
$Count2 = 0;
echo "<table border='0' width='100%' cellspacing='2'>"; 
              
while ($row_ConfMon = mysqli_fetch_assoc($ConfMon)) { 
    $locationid = $row_ConfMon['hotelID'];
    $RoomNo2 = $row_ConfMon['deviceName'];
    $companyname = $row_ConfMon['companyname'];
    $recordID = $row_ConfMon['record_ID'];
    $location = $row_ConfMon['location'];
    $DownDate = date("d-m-y", $row_ConfMon['uptime']);
    $DownTime = date("H:i", $row_ConfMon['uptime']);

    if($row_ConfMon['NoDevice'] == 1) {
        if($Count2 < $Limit2) {
                            
            if($Count2 == 0) {
                echo "<tr>";
            }
            echo "<a href=\"confmon.php\" target=\"_self\"><td class=\"roomviewpurple\" valign=\"top\"><div class=\"coltitle\"><a href=\"confmon_hist.php?recordID=$recordID\" target=\"_self\">$companyname</a></div> <div class=\"confmontime2\">$location<br />$RoomNo2<br /></div><span class=\"confmontime\">$DownDate<br /><div class=\"confmontime2\">$DownTime</div><br /></span></td></a>";
         } else {
            $Count2 = 0;
            echo "</tr><tr><a href=\"confmon.php\" target=\"_self\"><td class=\"roomviewpurple\" valign=\"top\"><div class=\"coltitle\"><a href=\"confmon_hist.php?recordID=$recordID\" target=\"_self\">$companyname</a></div><div class=\"confmontime2\">$location<br />$RoomNo2<br /></div><span class=\"confmontime\">$DownDate<br /><div class=\"confmontime2\">$DownTime</div><br /></span></td></a>";
        }
        $Count2++;
    } elseif($row_ConfMon['MobileDisplay'] == 1 && $row_ConfMon['messageCount'] == 2) {
        if($Count2 < $Limit2) {
            if($Count2 == 0) {
                echo "<tr>";
            }
            echo "<a href=\"confmon.php\" target=\"_self\"><td class=\"roomviewamber\" valign=\"top\"><div class=\"coltitle\"><a href=\"confmon_hist.php?recordID=$recordID\" target=\"_self\">$companyname</a></div> <div class=\"confmontime2\">$location<br />$RoomNo2<br /></div><span class=\"confmontime\">$DownDate<br /><div class=\"confmontime2\">$DownTime</div><br /></span></td></a>";
        } else {
            $Count2 = 0;
            echo "</tr><tr><a href=\"confmon.php\" target=\"_self\"><td class=\"roomviewamber\" valign=\"top\"><div class=\"coltitle\"><a href=\"confmon_hist.php?recordID=$recordID\" target=\"_self\">$companyname</a></div><div class=\"confmontime2\">$location<br />$RoomNo2<br /></div><span class=\"confmontime\">$DownDate<br /><div class=\"confmontime2\">$DownTime</div><br /></span></td></a>";
        }
        $Count2++;
    } elseif($row_ConfMon['messageCount'] == 2) {
        if($Count2 < $Limit2) {
            if($Count2 == 0) {
                echo "<tr>";
            }
            echo "<a href=\"confmon.php\" target=\"_self\"><td class=\"roomviewred\" valign=\"top\"><div class=\"coltitle\"><a href=\"confmon_hist.php?recordID=$recordID\" target=\"_self\">$companyname</a></div> <div class=\"confmontime2\">$location<br />$RoomNo2<br /></div><span class=\"confmontime\">$DownDate<br /><div class=\"confmontime2\">$DownTime</div><br /></span></td></a>";
        } else {
            $Count2 = 0;
            echo "</tr><tr><a href=\"confmon.php\" target=\"_self\"><td class=\"roomviewred\" valign=\"top\"><div class=\"coltitle\"><a href=\"confmon_hist.php?recordID=$recordID\" target=\"_self\">$companyname</a></div><div class=\"confmontime2\">$location<br />$RoomNo2<br /></div><span class=\"confmontime\">$DownDate<br /><div class=\"confmontime2\">$DownTime</div><br /></span></td></a>";
        }
        $Count2++;
    } else {
        if($Count2 < $Limit2) {
            if($Count2 == 0) {
                echo "<tr>";
            }
            echo "<td class=\"roomviewgreen\" valign=\"top\"><div class=\"coltitle\"><a href=\"confmon_hist.php?recordID=$recordID\" target=\"_self\">$companyname</a></div><div class=\"confmontime2\">$location<br />$RoomNo2<br /></div><span class=\"confmontime\">$DownDate<br /><div class=\"confmontime2\">$DownTime</div><br /></span></td>";
        } else {
            $Count2 = 0;
            echo "</tr><tr><td class=\"roomviewgreen\" valign=\"top\"><div class=\"coltitle\"><a href=\"confmon_hist.php?recordID=$recordID\" target=\"_self\">$companyname</a></div><div class=\"confmontime2\">$location<br />$RoomNo2<br /></div><span class=\"confmontime\">$DownDate<br /><div class=\"confmontime2\">$DownTime</div><br /></span></td></a>";
        }
        $Count2++;
    }
}
echo "</tr></table>";

当前表格按每5个单元格换行,我希望当Location ID变化时,表格自动开启新行,请问该需求能否实现?

解决方案

完全可以实现,核心思路是跟踪上一条记录的Location ID,每次循环时对比当前记录的Location ID,若不同则强制换行并重置计数器,具体实现如下:

修改后的完整PHP代码

$Limit2 = 5;
$Count2 = 0;
$prev_locationid = null; // 新增:跟踪上一个Location ID
echo "<table border='0' width='100%' cellspacing='2'>"; 

while ($row_ConfMon = mysqli_fetch_assoc($ConfMon)) { 
    $locationid = $row_ConfMon['hotelID'];
    $RoomNo2 = $row_ConfMon['deviceName'];
    $companyname = $row_ConfMon['companyname'];
    $recordID = $row_ConfMon['record_ID'];
    $location = $row_ConfMon['location'];
    $DownDate = date("d-m-y", $row_ConfMon['uptime']);
    $DownTime = date("H:i", $row_ConfMon['uptime']);

    // 核心逻辑:Location ID变化时强制换行
    if ($prev_locationid !== null && $locationid !== $prev_locationid) {
        // 关闭当前行(如果已有单元格)
        if ($Count2 > 0) {
            echo "</tr>";
            $Count2 = 0; // 重置计数器
        }
    }

    // 确定TD的样式类和外层链接
    $tdClass = "roomviewgreen";
    $outerLink = "";
    if($row_ConfMon['NoDevice'] == 1) {
        $tdClass = "roomviewpurple";
        $outerLink = "<a href=\"confmon.php\" target=\"_self\">";
    } elseif($row_ConfMon['MobileDisplay'] == 1 && $row_ConfMon['messageCount'] == 2) {
        $tdClass = "roomviewamber";
        $outerLink = "<a href=\"confmon.php\" target=\"_self\">";
    } elseif($row_ConfMon['messageCount'] == 2) {
        $tdClass = "roomviewred";
        $outerLink = "<a href=\"confmon.php\" target=\"_self\">";
    }

    // 生成TD内容
    $tdHtml = "<td class=\"{$tdClass}\" valign=\"top\">
        <div class=\"coltitle\"><a href=\"confmon_hist.php?recordID={$recordID}\" target=\"_self\">{$companyname}</a></div>
        <div class=\"confmontime2\">{$location}<br />{$RoomNo2}<br /></div>
        <span class=\"confmontime\">{$DownDate}<br /><div class=\"confmontime2\">{$DownTime}</div><br /></span>
    </td>";
    // 拼接外层链接(如果有)
    if ($outerLink) {
        $tdHtml = $outerLink . $tdHtml . "</a>";
    }

    // 原有每5个单元格换行的逻辑
    if($Count2 < $Limit2) {
        if($Count2 == 0) {
            echo "<tr>";
        }
        echo $tdHtml;
    } else {
        $Count2 = 0;
        echo "</tr><tr>" . $tdHtml;
    }
    $Count2++;
    $prev_locationid = $locationid; // 更新上一个Location ID
}
// 关闭最后一行和表格
if ($Count2 > 0) {
    echo "</tr>";
}
echo "</table>";

关键说明

  1. Location ID跟踪:新增$prev_locationid变量,每次循环结束时更新为当前记录的Location ID,下一次循环时对比两者,若不一致则触发换行逻辑。
  2. 强制换行处理:当Location ID变化时,若当前行已有单元格,先关闭该行并重置计数器,后续记录将从新行开始。
  3. 代码重构:将重复的TD生成逻辑抽离,减少冗余代码,后续修改样式或内容更便捷。
  4. HTML结构修复:确保所有行都能正确关闭,避免出现不完整的HTML标签。

内容的提问来源于stack exchange,提问作者DCJones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 15:37:11