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

PHP实现按房屋ID分栏显示用户名单:解决仅部分列显示问题

解决用户按房屋分组显示在独立列的问题

我一眼就看出问题出在哪了——你的用户结果集指针没有重置,导致除了第一列之外,后面的循环都读不到用户数据!下面给你详细分析和修改方案:

问题根源

你代码里的$unityResult是从getUnityEmail()获取的用户结果集,第一次循环执行while ($row_unity = mysqli_fetch_array($unityResult))时,已经把结果集的指针移到了末尾。后续循环时,指针没有回到开头,所以while循环直接跳过,自然显示不出用户名单。另外你用硬编码的$numbers字符串来对应房屋ID,既不灵活也容易出错,不如直接用房屋表的真实数据。

修改后的完整代码

// 1. 先把用户数据按fkhouseid分组存入数组,避免重复遍历结果集
$unityResult = getUnityEmail();
$usersByHouse = [];
while ($row_unity = mysqli_fetch_array($unityResult)) {
    $houseId = $row_unity['fkhouseid'];
    // 把同一房屋的用户放到对应分组里
    if (!isset($usersByHouse[$houseId])) {
        $usersByHouse[$houseId] = [];
    }
    $usersByHouse[$houseId][] = $row_unity;
}

// 2. 遍历房屋数据,生成对应列
$houseResult = getHouses();
$count = mysqli_num_rows($houseResult);

for ($x=0;$x<$count;$x++){
    $row_house = mysqli_fetch_array($houseResult);
    $houseId = $row_house['id']; // 假设房屋表的主键是id,根据你的实际字段调整
    $houseLetter = '';
    // 根据房屋ID获取对应的标识字母,也可以直接从房屋表读取名称
    switch($houseId) {
        case 1: $houseLetter = 'u'; break;
        case 2: $houseLetter = 'n'; break;
        case 3: $houseLetter = 'i'; break;
        case 4: $houseLetter = 't'; break;
        case 5: $houseLetter = 'y'; break;
        default: $houseLetter = '未知'; break;
    }

    echo "<div id='memberList$x' style='display:inline-block;vertical-align:top'>";
    echo "<fieldset class=fieldname style='display:inline'>";
    echo "<legend class=name_legend>$houseLetter</legend>";
    echo "<ul class='list'>";

    // 3. 显示当前房屋的用户
    if (isset($usersByHouse[$houseId])) {
        foreach ($usersByHouse[$houseId] as $user) {
            format_member_list_filters($user);
        }
    }

    echo "</ul>";
    echo "</fieldset>";
    echo "<br>";
    echo "</div>";
}

关键改动说明

  • 提前分组用户数据:把用户结果集一次性遍历转成按fkhouseid分组的数组$usersByHouse,后续直接通过房屋ID取数据,避免了重复遍历结果集和指针重置的问题,效率也更高。
  • 使用真实房屋数据:直接从houseResult里读取房屋ID,替代硬编码的$numbers,如果后续房屋ID有变化,代码不需要修改。
  • 移除不必要的指针操作:原来的mysqli_data_seek($houseResult, 0);是多余的,因为我们是按顺序遍历房屋结果集,每次循环读取一行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:52:30