私があなたの望む出力を理解しているなら、あなたは次のようなものが欲しいです(<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
これが正しく、各「ルール」(ルールが「最初の3つ」と「次の5つ」)のアイテムの数が変わる可能性がある場合(ちょうどそうだったように)、それらを表すために作成された変数をお勧めします-そのように、将来的には、変数を変更するだけで、実際のコード変更について心配する必要はありません。
私がお勧めする最初の方法は、(半)完全な書き換えです。このメソッドは、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>
)に設定されます。2番目の変数$repeatedGroupLength
は、繰り返しの「アイテムグループ」ブロック(など<li>item # item # item #</li>
)に表示される要素の数を設定します。