如果我了解您想要的输出,您想要类似的东西(<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>
)。