PHP包装每4个元素

我有这个php代码,将每个4个元素包装在div class =“ row”中.

我的代码是这样的:

$counter = 1;
echo '<div class="row">';
foreach($items as $item) {

  // some code here

    if($counter % 4 == 0) {
       echo '</div><div class="row">';
    }
    $counter++
}
echo '</div>';

这可以工作,但显然在末尾添加了一个额外的div class =“ row”.我该如何预防?

更新

好吧,设法找到一些东西.这是我的位置.

$xml = simplexml_load_file('xml/list.xml');
$count = count($xml);
$counter = 1;

if(file_exists('xml/list.xml')) {
    echo '<div class="row">';
    foreach($xml->work as $item) {
        echo $counter;
        if($counter % 4 == 0) {
           echo '</div><div class="row">';
        }
        $counter++;
    }
    echo '</div>';
}

不知道为什么,但是对于xml,此代码放置了一个额外的空div.仅当xml节点数是4的倍数时,才会出现这种情况.

样品Xml

<list>
    <work id="1">
        <title>title here</title>
        <description>description here</description>
        <img>image name</img>
        <url>url</url>
    </work>
    <work id="2">
        <title>title here</title>
        <description>description here</description>
        <img>image name</img>
        <url>url</url>
    </work>
    <work id="3">
        <title>title here</title>
        <description>description here</description>
        <img>image name</img>
        <url>url</url>
    </work>
    <work id="4">
        <title>title here</title>
        <description>description here</description>
        <img>image name</img>
        <url>url</url>
    </work>
</list>

请帮忙.谢谢

解决方法:

有很多方法可以做到这一点.
如果没有性能问题,这将是我的选择.

<?php
$items = [1,2,3,4,5,6];
function itemsToRow($items) {
    $rows = [];
    $itemIndex = 0;
    foreach ($items as $item) {
        $rowIndex = (int) ($itemIndex / 4);
        $rows[$rowIndex][] = $item;
        $itemIndex++;
    }
    return $rows;
}

这将为您提供一个需要显示它的结构的数组.
然后渲染它

foreach(itemsToRow($items) as $rowItems) {
    echo '<div class="row">';
    foreach($rowItems as $item) {
      echo $item;
    }
    echo '</div>';
}
?>

你可以在这里找到一个有效的例子https://eval.in/919896

有什么优势?您不必在循环内或循环外都处理特殊情况.

这降低了代码复杂性并增强了可读性.

上一篇:循环的不同行为


下一篇:python-在日期框架上与函数进行交互