PHP循环实现数据库内容左右交替布局时出现重复问题求助
问题原因
你代码的核心问题是:在if/else分支逻辑结束后,又重复写了一套左侧布局的代码。这意味着每遍历一条数据库数据时,会先根据$i的值渲染一次左/右布局,紧接着又强制渲染一次左侧布局,自然就出现了同一信息重复显示的情况。
修复方案
删掉if/else块之后的那套重复代码,改用$i的奇偶性来控制左右交替布局,确保每条数据只被渲染一次。
修改后的完整代码:
<?php // 假设这里有遍历数据库数据的循环,比如 foreach($data as $i => $D) { ?> <?php if ($i % 2 === 0) { // 偶数索引显示左布局 ?> <tr> <td align="center" width="100%" style="background-color:#eceded"> <a style="text-decoration:none" href="<?php echo $D->LINK ?>" target="_blank"> <img src="<?php echo $D->IMAGEM ?>" alt="" style="width: 207px;border-radius: 15px 0px 0px 15px;float: left;margin-left: 71px;"> <div style="background-color: #ffffff;width: 50%;color: #6a6a6a;border-radius: 0px 15px 15px 0px;margin-left: 219px;height: 209px;"> <p style="font-family:Arial;font-size:20px;line-height:130%;color:#6a6a6a;text-align:center;padding-top: 0.5em;"> <strong><?php echo $D->TITULO ?></strong> </p> <p style="text-align: left; padding: 0px 35px 0px 35px;"><?php echo $D->DESCRICAO ?></p> <img src="https://unifeso.edu.br/email-news/images/btn_news.png" alt="" style="width: 190px; margin-top: 0px; margin-left: 7px;"> </div> </a> </td> </tr> <tr> <td style="height:40px;background-color:#eceded"> </td> </tr> <?php } else { // 奇数索引显示右布局 ?> <tr> <td align="center" width="100%" style="background-color:#eceded"> <a style="text-decoration:none" href="<?php echo $D->LINK ?>" target="_blank"> <img src="<?php echo $D->IMAGEM ?>" alt="" style="width: 207px;border-radius: 0px 15px 15px 0px;float: right;margin-right: 73px;"> <div style="background-color: #ffffff;width: 50%;color: #6a6a6a;border-radius: 15px 0px 0px 15px;margin-right: 222px;height: 209px;"> <p style="font-family:Arial;font-size:20px;line-height:130%;color:#6a6a6a;text-align:center;padding-top: 0.5em;"> <strong><?php echo $D->TITULO ?></strong> </p> <p style="text-align: right; padding: 0px 35px 0px 35px;"><?php echo $D->DESCRICAO ?></p> <img src="https://unifeso.edu.br/email-news/images/btn_news.png" alt="" style="width: 190px; margin-top: -30px; margin-left: 7px;"> </div> </a> </td> </tr> <tr> <td style="height:40px;background-color:#eceded"> </td> </tr> <?php } ?> <?php // } 循环结束 ?>
关键说明
- 用
$i % 2 === 0判断索引奇偶性,实现第一条左、第二条右、第三条左的交替效果,比只判断$i === 0更通用,能支持多条数据的循环。 - 彻底删除了
if/else块之后的重复布局代码,确保每条数据只渲染一次对应布局。 - 修复了原代码中
margin-top: px的语法错误,改成margin-top: 0px避免样式异常。
内容的提问来源于stack exchange,提问作者André Alves
相关产品推荐
相关产品推荐

