
本文介绍如何用 php 模运算符(%)替代冗长的硬编码索引判断,实现对索引 0/10/20…、1/11/21… 等每 10 个一组的简洁分组逻辑。
在 Blade 模板或 PHP 逻辑中,当需要根据循环索引(如 $loop->index)执行不同操作,并且这些索引呈现「周期性规律」——例如 0, 10, 20, 30... 属于第 0 组;1, 11, 21, 31... 属于第 1 组;依此类推——直接枚举所有可能值(如 == 0 || == 10 || == 20...)不仅代码冗长、难以维护,还极易出错,尤其当索引范围扩大时。
核心思路:利用模运算提取索引的「个位周期特征」
$loop->index % 10 的结果恒为 0 到 9 之间的整数,恰好对应你所需的 10 个分组类别:
- 若 $loop->index % 10 === 0 → 索引属于 {0, 10, 20, 30, ...}
- 若 $loop->index % 10 === 1 → 索引属于 {1, 11, 21, 31, ...}
- …
- 若 $loop->index % 10 === 9 → 索引属于 {9, 19, 29, 39, ...}
✅ 推荐写法:使用 @switch(语义清晰、可读性强)
@switch($loop->index % 10)
@case(0)
{{-- 对应索引 0, 10, 20, 30... --}}
Section A
@break
@case(1)
{{-- 对应索引 1, 11, 21, 31... --}}
Section B
@break
@case(2)
{{-- 对应索引 2, 12, 22, 32... --}}
Section C
@break
@default
{{-- 其他情况(可选) --}}
Regular item
@endswitch✅ 备选写法:精简版 @if / @elseif(兼容性更广)
@if ($loop->index % 10 === 0)
{{-- Group 0 --}}
@elseif ($loop->index % 10 === 1)
{{-- Group 1 --}}
@elseif ($loop->index % 10 === 2)
{{-- Group 2 --}}
@elseif ($loop->index % 10 === 3)
{{-- Group 3 --}}
@else
{{-- Group 4–9 或统一处理(按需调整) --}}
@endif⚠️ 注意事项与最佳实践
- 避免混淆 index 和 iteration:Blade 中 $loop->index 从 0 开始,而 $loop->iteration 从 1 开始。确保你使用的是正确的变量(本例基于 index)。
- 边界安全:模运算天然支持任意大小的索引(包括超过 100 的值),无需手动扩展条件列表。
- 性能无损耗:% 是底层高效运算,比多次 || 判断更快更轻量。
- 可扩展性:若需改为每 5 个一组(如 0,5,10...),只需将 10 替换为 5;逻辑完全复用。
通过模运算重构后,你的条件逻辑从数十行硬编码压缩为几行语义化代码,既提升了可读性与可维护性,也体现了对基础编程原理的合理运用。










