微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。