以下循环将项目分为两组:第一组,每组5个项目,然后每组6个项目。我正在尝试对此进行修改,以便对li中的前3个项目进行分组,然后对li中的每个项目进行分组。
for ($i = 1; $i < 20; $i++) {
echo ($i === 1 || $i % 6 === 0) ? "<li>" : null,
"<div>item {$i}</div>",
($i % 6 === 5) ? "</li>" : null;
}
if ($i % 6 !== 0) echo "</li>";
我正在尝试修改为以下内容,但是分组工作不正常(例如,错误的项目数量在li中,某些项目不会进入li等。)
for ($i = 1; $i < 20; $i++) {
echo ($i === 1 || $i % 5 === 0) ? "<li>" : null,
"<div>item {$i}</div>",
($i % 5 === 3) ? "</li>" : null;
}
if ($i % 5 !== 0) echo "</li>";
答案 0 :(得分:1)
试试这个(已编辑):
echo "<li>";
for($i = 1; $i < 20; $i++) {
$mod = $i % 5;
echo $mod == 4 ? "<li>" : null,
"<div>item {$i}</div>",
$mod == 3 ? "</li>" : null;
}
if($i % 5 != 3) echo "</li>";
Code example with slight changes
说明:
如果你想将5个组中的项目分组,那么mod为5.前三个项目是特殊情况,但由于3小于5,我们可以将前三个数字合并到主循环中。
您的代码存在的问题是添加<li>
。由于我们从1开始$i
而不是0,我们应该使用$i % 5 == 4
而不是$i % 5 == 0
。
答案 1 :(得分:1)
如果我理解你想要的输出,你需要像(为了简洁而忽略<div>
标签):
<li>item #1</li>
<li>item #2</li>
<li>item #3</li>
<li>
item #4
item #5
item #6
item #7
item #8
</li>
... repeat
如果这是正确的,并且每个“规则”中的项目数量(规则是“前三个”和“下一个五个”)可能会发生变化(正如他们刚才所做的那样),我会建议创建变量来表示它们 - 这样,将来,您只需要更改变量而不必担心实际的代码更改。
我推荐的第一种方法是(半) - 完全重写。这种方法使用了一堆if
- 语句,我认为这种语句更具可读性/可管理性:
$firstGroupLength = 3;
$repeatedGroupLength = 5;
for ($i = 1; $i < 20; $i++) {
if ($i <= $firstGroupLength) {
echo '<li><div>item ' . $i . '</div></li>';
} else {
if ((($i - $firstGroupLength) % $repeatedGroupLength) == 1) {
echo '<li>';
}
echo '<div>item ' . $i . '</div>';
if ((($i - $firstGroupLength) % $repeatedGroupLength) == 0) {
echo '</li>';
}
}
}
if ((($i - $firstGroupLength) % $repeatedGroupLength) != 1) {
echo '</li>';
}
这种方法可以完成工作,但从长远来看也是一个很大的问题。但是,如果在将来的任何时候你希望第一组显示不同而不是重复组,比如可能使用不同的CSS类或其他随机功能 - 这个方法在表格中列出为你服务!
如果您更愿意坚持使用三元运算符方法,那么以下内容也应该有效:
$firstGroupLength = 3;
$repeatedGroupLength = 5;
echo '<li>';
for($i = 1; $i < 20; $i++) {
echo ((($i % $repeatedGroupLength) == ($repeatedGroupLength - 1)) ? '<li>' : '')
. '<div>item ' . $i . '</div>'
. ((($i % $repeatedGroupLength) == $firstGroupLength) ? '</li>' : '');
}
if (($i % $repeatedGroupLength) != $firstGroupLength) echo '</li>';
在这两种方法中,您都会找到$firstGroupLength
变量。这被设置为自己重复的第一个“组”项(例如<li>item #</li>
)。第二个变量$repeatedGroupLength
将设置重复的“项目组”块(例如<li>item # item # item #</li>
)中显示的元素数量。