@kamisarlapsha

Как при перебирании массива элементы с одинаковым классом не шли подряд?

Привет! У меня есть массив. Из него формируются блоки.
В массиве в каждой записи есть 1 из 4 этих классов для каждого блока:
grid-1
grid-2v
grid-2h
grid-4


И в результате потом у каждого <div class="product-laylout"> есть какой либо из этих классов. Но как сделать, чтобы допустим два grid-2v подряд не шло. И также все остальные, кроме grid-1.

Например было
<div class="product-laylout grid-2h"></div>
<div class="product-laylout grid-2h"></div>
<div class="product-laylout grid-1"></div>
<div class="product-laylout grid-1"></div>
<div class="product-laylout grid-4"></div>
<div class="product-laylout grid-4"></div>


А стало так
<div class="product-laylout grid-2h"></div>
<div class="product-laylout grid-1"></div>
<div class="product-laylout grid-4"></div>
<div class="product-laylout grid-1"></div>
<div class="product-laylout grid-4"></div>
<div class="product-laylout grid-2h"></div>

Или такое лучше сделать на jQuery ? Количество <div class="product-laylout" будет большим. Заранее спасибо!
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ответы на вопрос 1
@IS-Builder
~ PHP-8 & REGEXP - This is a really powerful kit ~
Если правильно понял [строку shuffle($styles); можно удалить, если ваш массив итак формируется случайным образом]:
$styles = [
    'grid-2h',
    'grid-2h',
    'grid-1',
    'grid-1',
    'grid-4',
    'grid-4'
];

shuffle($styles);
$total = count($styles);
$trigger = 1;
$buffer = [];

while ($trigger) {
    foreach ($styles as $k => $style) {
        if (count($buffer) == $total) {
            $trigger = 0;
            break;
        }
        $next = $styles[$k+1] ?? ($total - 1);
        $next == $style ?: $buffer[] = $style;
    }
}

print_r( $buffer );
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы