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
相关产品推荐
相关产品推荐

