оптимизировать логику цикла для отображения структуры

Я хочу заказать 3 статьи в строке, в то время как в каждой второй строке одной статьи отображается широкое изображение, заполняющее две точки из трех.
это код, который я придумал, но он кажется очень сложным для чего-то такого «легкого». Пример вывода внизу.

возможно кто-то знает что-то, что может сделать то же самое, но проще.

Спасибо!

<?php
$i = 0;
$x = 0;
$first = false;
$three = false;
$five = true;
foreach( range( 0, 27 ) as $k ) {
if( $x != 0 && $x % 3 == 0 ) {
echo "\n";
}
$x++;
$i++;
if( !$first && $i == 5 ) {
$i = 0;
$x++;
$first = true;
echo '[__]';
}
elseif( $first && !$three && $i == 4 ) {
$i = 0;
$x++;
$three = true;
$five = false;
echo '[__]';
}
elseif( $first && !$five && $i == 6 ) {
$i = 0;
$x++;
$three = false;
$five = true;
echo '[__]';
}
else echo '[]';
}
?>

выход:

[][][]
[][__]
[][][]
[__][]
[][][]
[][__]
[][][]
[__][]
[][][]
[][__]
[][][]

1

Решение

допустим, у вас есть 27 статей

$articles = 27 / 3;

У меня есть такой способ, я надеюсь, что это работает с вами ОБНОВЛЕНО

<?php
$x = false;
for ($i = 0; $i < $articles; $i++) {
for($j = 0;$j < 3;$j++) {
if ($i % 2 == 0) {
if ($x && $j % 2 == 0) {
echo '[ ] ';
} else {
echo '[ _ ] ';
$x = !$x;
$j++;
}
} else {
echo '[ ]';
}
}
echo '<br />';
}
?>

и это мой результат

введите описание изображения здесь

ОБНОВЛЕНИЕ 1

просто измените первый цикл на

$i=1

поэтому он не может мод 2, так что вы получили первые три, а затем измените

if($x && $i % 2 == 0)

чтобы быть правдой, как это

if(!$x && $i % 2 == 0)

ПРИМЕР

<?php
$count = 7;
$articles = ceil($count / 3);
$articles = $articles + ceil(ceil($articles/2) / 3);
$x = false;
for ($i = 1; $i <= $articles; $i++) {
if ($count == 0) break;
for($j = 0;$j < 3;$j++) {
if ($count == 0) break;
if ($i % 2 == 0) {
if (!$x && $j % 2 == 0) {
echo '[ ] ';
} else {
echo '[ _ ] ';
$x = !$x;
$j++;
}
} else {
echo '[ ]';
}
$count--;
}
echo '<br />';
}
?>

результат изображения

введите описание изображения здесь

1

Другие решения

на случай, если кому-то понадобится реализация ветки:

{% import _self as macros %}
{% set rows = ( items|length / 3 ) %}
{% set x = false %}
{% set y = 0 %}

{% for i in 1..rows+2 %}
{% set skip = false %}
{% for j in 0..2 %}
{% if skip %}
{% set skip = false %}
{% else %}
{% if i is divisible by(2) %}
{% if x == false and j is divisible by(2) %}
{{ macros.item( items[y] ) }}
{% set y = y + 1 %}
{% else %}
{{ macros.item( items[y], true ) }}
{% set y = y + 1 %}
{% set skip = true %}
{% if x == false  %}
{% set x = true %}
{% else %}
{% set x = false %}
{% endif %}
{% endif %}
{% else %}
{{ macros.item( items[y] ) }}
{% set y = y + 1 %}
{% endif %}
{% endif %}
{% endfor %}
<div class="clearfix"></div>
{% endfor %}

блочный элемент macro = bootstrap, если задано значение true, ширина столбца изменяется от 4 до 8, чтобы покрыть две точки — пришлось реализовать переменную пропуска, потому что в ветке нельзя редактировать индекс цикла — добавлен дополнительный независимый счетчик для просмотра массива статьи , строк + 2 на основе / 3 и всего 33 статьи на странице.

1

По вопросам рекламы [email protected]