如何在PHP的foreach/for循环中为第3、4项添加HTML闭合标签
问题描述
我有一个设计方案需要在foreach循环中落地实现,设计效果如下:
我需要在循环过程中,每处理到第3、第4个值时添加对应的HTML闭合标签,请问有没有可行的实现方案?
示例数组
$array = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21);
现有尝试代码
$tmp = ''; $count = 1; foreach($array as $val){ if($tmp == 1){ echo "Second Box".$val."<br>"; $tmp=0; $count++; }else{ if($count % 2 == 0){ echo "Second Box".$val."<br>"; $tmp = 1; }else{ echo "First Box".$val."<br>"; } } $count++; }
当前输出结果
First Box1<br> Second Box2<br> Second Box3<br> <br> First Box4<br> Second Box5<br> Second Box6<br> <br> First Box7<br> Second Box8<br> Second Box9<br> <br> First Box10<br> Second Box11<br> Second Box12<br> <br> First Box13<br> Second Box14<br> Second Box15<br> <br> First Box16<br> Second Box17<br> Second Box18<br> <br> First Box19<br> Second Box20<br> Second Box21
当前输出效果如下:
解决方案
你现有代码的问题是计数逻辑混乱,没有按每4个元素为一组的规则做拆分。可以按每4个元素为一组遍历,组内第3、4个元素处理完成后输出对应的闭合标签即可,实现代码如下:
$count = 0; // 数组总长度,用于最后收尾判断 $total = count($array); // 标记Second Box是否已打开 $isSecondBox = false; // 输出首个First Box开标签,替换为你实际用的HTML标签即可 echo '<div class="first-box">'; foreach ($array as $val) { $count++; // 到每组第3个元素时,关闭First Box,打开Second Box if ($count % 4 == 3 && !$isSecondBox) { echo '</div>'; // First Box闭合标签 echo '<div class="second-box">'; // Second Box开标签 $isSecondBox = true; } // 输出当前元素内容,保留原有前缀的写法 echo ($isSecondBox ? "Second Box" : "First Box") . $val . "<br>"; // 到每组第4个元素时,关闭Second Box,有后续元素则新开下一组的First Box if ($count % 4 == 0) { echo '</div>'; // Second Box闭合标签 $isSecondBox = false; // 不是最后一个元素的话新开下一组 if ($count != $total) { echo '<div class="first-box">'; } } } // 处理最后一组不足4个元素的收尾,闭合未关的标签 if ($isSecondBox) { echo '</div>'; } elseif ($count %4 != 0) { echo '</div>'; }
如果不需要嵌套Box结构,只是要在第3、第4个元素后加对应闭合标签,直接在$count %4 ==3和$count%4 ==0的判断里输出对应标签即可,不用处理开标签逻辑。
内容的提问来源于stack exchange,提问作者Ajendra Panwar
相关产品推荐
相关产品推荐

