我有这段代码:
for ($i = 0; $i < count($listings); $i++)
{
if ($i != 0 && $i%2 == 0)
{
$endul .= $arr[$i] . '</ul> <hr /> <ul class="listing">';
}
else
{
$endul .= $arr[$i];
}
我正在尝试关闭后2条记录,然后重新打开接下来的2条记录等等......到目前为止,似乎代码正在“有点”正常工作但它取得前3条记录然后关闭UL而不仅仅是前2?
答案 0 :(得分:2)
这是我的第一篇StackOverflow帖子,请耐心等待:):
问题出在这里:
if ($i != 0 && $i%2 == 0)
如果你在循环中追踪$ i的值,你会得到以下结果:
$i = 0 ==> false
$i = 1 ==> false
$i = 2 ==> true
$i = 3 ==> false
$i = 4 ==> true
所以打印出来
$arr[0] .
$arr[1] .
$arr[2] . '</ul> <hr /> <ul class="listing">' .
$arr[3] .
$arr[4] . '</ul> <hr /> <ul class="listing">'
为了解决这个问题,您需要更改if条件
if ($i%1 == 1)
希望这有帮助!
答案 1 :(得分:1)
您可以先尝试将它们分组为
$group = 2;
$listings = range("A", "Z");
foreach ( array_chunk($listings, 2) as $set ) {
printf('<ul class="listing">%s</ul>', implode(array_map(function ($v) {
return sprintf('<li>%s</li>', $v);
}, $set)));
}
或
foreach ( array_chunk($listings, 2) as $set ) {
printf('<ul class="listing">');
foreach ( $set as $v ) {
printf('<li>%s</li>', $v);
}
printf('</ul>');
}
你会得到相同的结果
<ul class="listing">
<li>A</li>
<li>B</li>
</ul>
<ul class="listing">
<li>C</li>
<li>D</li>
</ul>
<ul class="listing">
<li>E</li>
<li>F</li>
</ul>
<ul class="listing">
<li>G</li>
<li>H</li>
</ul>
<ul class="listing">
<li>I</li>
<li>J</li>
</ul>
.......
答案 2 :(得分:0)
嗯,0是第一条记录,你的if语句特别排除了它。所以它不会在第三个记录之后关闭,即$ i = 2。
示例:
for ($i = 1; $i < 10; $i++) {
if ($i % 2 == 0) {
echo '</ul>';
}
}
这对我来说很好。
答案 3 :(得分:0)
更改此行:
$endul .= $arr[$i] . '</ul> <hr /> <ul class="listing">';
对此:
$endul .= '</ul> <hr /> <ul class="listing">'.$arr[$i];
答案 4 :(得分:0)
这是Perl还是PHP,对吗?也许将来用这些语言标记它?无论如何,我怀疑你的问题是你的数组以零索引开头。
我在推测,但我们假设您的@arr数组包含带有HTML标记的元素
<li>whatever</li>
订单项。
让我们计算你的元素:
元素0 - 我通过测试吗?否:添加第一个订单项,但不要添加关闭,规则和打开。
元素1 - 我通过测试吗?否:添加第二个订单项,但不要添加关闭,规则和打开。
元素2 - 我通过测试吗?是:添加第三个订单项,然后添加关闭,规则并打开。
元素3 - 我通过测试吗?否:添加新的第一个订单项,但不要添加关闭,规则和打开。
元素4 - 我通过测试吗?是:添加新的第二个订单项,然后添加关闭,规则并打开。
元素5 - 您知道模式:我们在关闭前重复两个订单项的组。
因为这段代码从零开始,所以我们在第一组项目中有零和两个额外的案例。
索引的模数可以测试奇数而不是偶数:
if ($i%2 == 1)
我认为测试会按照你想要的方式构建格式,你可以在每个奇数元素之后添加“记录关闭”标记。我假设您必须在循环外部使用逻辑来进行最终的关闭标记。当然,在最终元素为奇数的情况下,你仍然会有一个额外的空的无序列表容器,但是可能会添加一些东西吗?
答案 5 :(得分:0)
这是最好的方法:
$rows = range(1,10);
$i=1;
echo "<ul>";
foreach($rows as $key=>$row)
{
echo "<li>$row</li>";
if($i%2==0)
{
echo "</ul><ul>";
}
$i++;
}
echo "</ul>";