我有这个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
有什么优势?您不必在循环内或循环外都处理特殊情况.
这降低了代码复杂性并增强了可读性.