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

PHP循环按每3项重复红、灰、白配色的实现问题

解决PHP循环中每3项重复配色的问题

哈哈,我一眼就瞅出你代码里的问题啦!你当前的判断逻辑完全没贴合「每3项重复」的规则,才导致第4个元素配色异常。咱们一步步来捋清楚:

问题根源分析

你原本的代码先判断$row[0] % 3 == 0(对应白色),接着用elseif ($row[0] % 2 == 0)判断灰色,剩下的归为红色。但这个逻辑有个致命问题:把所有偶数都归为灰色,可第4个元素(id=4)明明属于「红-灰-白」循环里的第一个位置(红),却因为是偶数被误判成灰色了!

正确的对应关系应该是按id对3取模的结果来匹配:

  • id=1、4、7... → 模3余1 → 红色
  • id=2、5、8... → 模3余2 → 灰色
  • id=3、6、9... → 模3余0 → 白色

修正后的代码方案

方案1:基于id的模运算(适用于id连续的情况)

用switch或者顺序正确的if-else来判断,避免逻辑冲突:

while ($row = mysqli_fetch_row($result)) {
    $id = $row[0];
    echo 'id: ' . $id . '<br>';
    
    // 用switch更清晰
    switch($id % 3) {
        case 1:
            echo 'i am red<br><br><br>';
            break;
        case 2:
            echo 'i am grey<br><br><br>';
            break;
        case 0: // 模3余0对应第3、6...项
            echo 'i am white<br><br><br>';
            break;
    }
}

如果偏爱if-else写法,调整判断顺序即可:

while ($row = mysqli_fetch_row($result)) {
    $id = $row[0];
    echo 'id: ' . $id . '<br>';
    
    if ($id % 3 == 1) {
        echo 'i am red<br><br><br>';
    } elseif ($id % 3 == 2) {
        echo 'i am grey<br><br><br>';
    } else {
        echo 'i am white<br><br><br>';
    }
}

方案2:用独立计数器(适用于id不连续的情况)

如果你的数据库id可能存在缺失(比如删除过数据),那用独立的计数器来追踪循环位置更稳妥,不受id影响:

$loopCounter = 0;
while ($row = mysqli_fetch_row($result)) {
    $loopCounter++;
    echo 'id: ' . $row[0] . '<br>';
    
    switch($loopCounter % 3) {
        case 1:
            echo 'i am red<br><br><br>';
            break;
        case 2:
            echo 'i am grey<br><br><br>';
            break;
        case 0:
            echo 'i am white<br><br><br>';
            break;
    }
}

这样不管id是1、2、4、5...还是其他不连续的情况,都会严格按照「红-灰-白」的顺序循环配色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:16:47