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

如何拆分PHP循环实现幻灯片每2图一组、每第3张幻灯片仅1图

问题描述

数据库中有约十几张图片(示例为19张),需要实现以下幻灯片分组规则:

  • 每3张幻灯片为一组
  • 组内前2张幻灯片各显示2张图片
  • 组内第3张幻灯片仅显示1张图片
  • 循环此规则直到所有图片分配完毕

现有视图代码和controller.php中的realizations_mobile方法无法实现预期效果,以下是修正方案:


修正后的Controller代码
public function realizations_mobile()
{
    $media_gallery = carbon_get_post_meta(88, 'crb_media_gallery_realizations');
    $slides = [];
    $index = 0;
    $totalImages = count($media_gallery);

    while ($index < $totalImages) {
        // 组内第1张幻灯片:取2张图
        if ($index < $totalImages) {
            $slide1 = [];
            for ($i = 0; $i < 2 && $index < $totalImages; $i++) {
                $slide1[] = ['source' => $media_gallery[$index++]];
            }
            $slides[] = $slide1;
        }

        // 组内第2张幻灯片:取2张图
        if ($index < $totalImages) {
            $slide2 = [];
            for ($i = 0; $i < 2 && $index < $totalImages; $i++) {
                $slide2[] = ['source' => $media_gallery[$index++]];
            }
            $slides[] = $slide2;
        }

        // 组内第3张幻灯片:取1张图(剩余图片不足时跳过)
        if ($index < $totalImages) {
            $slides[] = [['source' => $media_gallery[$index++]]];
        }
    }

    return $slides;
}

修正后的视图代码
$slideIndex = 1;
foreach($realizations_mobile as $slide) {
    // 生成幻灯片容器基础样式
    $activeAttr = $slideIndex == 1 ? ' data-te-carousel-active' : '';
    $hiddenClass = $slideIndex != 1 ? ' hidden' : '';
    
    echo '<div class="relative float-left -mr-[100%] w-full transition-transform duration-[600ms] ease-in-out motion-reduce:transition-none' . $hiddenClass . '" data-te-carousel-item' . $activeAttr . '>';
    echo '<div class="flex flex-col gap-[30px]">';

    // 根据幻灯片位置渲染内容
    if ($slideIndex % 3 == 0) {
        // 组内第3张幻灯片:仅显示1张图
        echo '1 element<br>';
        echo $slide[0]['source'] . '<br>';
    } else {
        // 组内前2张幻灯片:显示所有分配的图片(最多2张)
        echo count($slide) . ' elements<br>';
        foreach($slide as $element) {
            echo $element['source'] . '<br>';
        }
    }

    echo '</div></div>';
    $slideIndex++;
}

关键修改说明
  1. Controller逻辑重构

    • 抛弃原固定按2图/幻灯片的拆分逻辑,改为严格遵循2图→2图→1图的循环批次分配
    • 使用while循环逐批取图,自动处理剩余图片(比如19张图最后剩余4张时,会生成2个各含2图的幻灯片)
    • 不再生成空图片项,避免无效内容
  2. 视图代码优化

    • 移除冗余的$n变量,直接用$slideIndex判断幻灯片在组内的位置
    • 简化激活状态和隐藏类的生成逻辑,代码更清晰
    • 兼容最后一组可能不足2张图的情况,自动显示实际分配的图片数量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:47:24