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

PHP中foreach遍历array返回数据量多于实际数据问题排查

PHP项目Swiper轮播渲染条目数量异常

问题描述

控制器层查询infografis数据,实际返回仅2条数组,赋值给$content['widgetinfografis']传递到视图层,视图层遍历渲染Swiper轮播项时,最终页面渲染条目数多于2条,不符合预期。

相关代码

控制器层代码

$infografis = $this->mapi->getInfografis(0, 5);

if (count($infografis) >= 1) {
    $content['widgetinfografis']  = $infografis;
}

视图层代码

<?php if(!empty($widgetinfografis)):?>
        <!-- Infografis -->
        <div class="infografis">
            <div class="warp-infografis">
                <div class="title-section title-section-infografis">
                    INFOGRAFIS
                    <span>MORE<a href="<?php echo $more ?>"><i class="fa fa-plus"></i></a></span>
                </div>
                <div class="warp-list-infografis">
                    <div class="swiper-infografis">
                        <div class="swiper-wrapper">
                            <?php $i = 1; foreach($widgetinfografis as $key => $value) { ?>
                            <article class="list-infografis swiper-slide">
                                <a href="<?php echo $value['link']; ?>">
                                    <div class="img-infografis">
                                        <img src="<?php echo image_uri().str_replace("thumb","master",$value['image_content']); ?>"
                                            alt="img-news">
                                    </div>
                                    <div class="warp-detail-infografis">
                                        <div class="title-infografis">
                                            <a href="<?php echo $value['link']; ?>"
                                                class="title"><?php echo $value['title']; ?></a>
                                        </div>
                                    </div>
                                </a>
                            </article>
                            <?php $i++; } ?>

                        </div>
                    </div>

                    <div class="swiper-button-prev"></div>
                    <div class="swiper-button-next"></div>

                </div>
            </div>
        </div>
        <!-- End Infografis -->
        <?php endif;?>

已确认信息

  • $widgetinfografis原始数据仅为2条
  • 实际页面渲染出的轮播条目多于2条,和数据源数量不符

异常原因及解决方案

  • Swiper配置开启loop循环导致重复渲染
    Swiper的loop: true参数会自动复制前后slide节点实现无缝滚动效果,2条数据的场景下会额外复制2~3个节点填充,视觉上看起来条目变多,属于Swiper正常逻辑,无需额外修复,如不需要该效果将loop配置改为loop: false即可。
  • 视图文件被重复加载
    打开浏览器开发者工具,查看swiper-wrapper节点下的实际子节点数量:
    • 若节点数等于2,可确定是Swiper loop特性导致的视觉重复
    • 若节点数大于2,检查父模板是否重复引入该视图片段,或foreach逻辑是否被多次执行
  • 变量被意外修改
    检查控制器完成$content['widgetinfografis']赋值后,是否存在后续代码修改$content或$infografis变量,比如数组追加、数组合并操作覆盖了原有2条数据。
  • 缓存未更新
    若项目开启页面缓存或视图缓存,清空全部缓存后重新测试即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:15:02