Пересортировать по 4 элемента
Помогите, пожалуйста, пересортировать элементы. Элементы выводятся в таком порядке
<div class="row block-tabs">
<div class="col-25 tab" data-item-id="175">1</div>
<div class="col-100 desc" data-desc-id="175">1</div>
<div class="col-25 tab" data-item-id="176">2</div>
<div class="col-100 desc" data-desc-id="176">2</div>
<div class="col-25 tab" data-item-id="177">3</div>
<div class="col-100 desc" data-desc-id="177">3</div>
<div class="col-25 tab" data-item-id="178">4</div>
<div class="col-100 desc" data-desc-id="178">4</div>
<div class="col-25 tab" data-item-id="179">5</div>
<div class="col-100 desc" data-desc-id="179">5</div>
<div class="col-25 tab" data-item-id="180">6</div>
<div class="col-100 desc" data-desc-id="180">6</div>
<div class="col-25 tab" data-item-id="181">7</div>
<div class="col-100 desc" data-desc-id="181">7</div>
</div>
Необходимо получить в таком
<div class="row block-tabs">
<div class="col-25 tab" data-item-id="175">1</div>
<div class="col-25 tab" data-item-id="176">2</div>
<div class="col-25 tab" data-item-id="177">3</div>
<div class="col-25 tab" data-item-id="178">4</div>
<div class="col-100 desc" data-desc-id="175">1</div>
<div class="col-100 desc" data-desc-id="176">2</div>
<div class="col-100 desc" data-desc-id="177">3</div>
<div class="col-100 desc" data-desc-id="178">4</div>
<div class="col-25 tab" data-item-id="179">5</div>
<div class="col-25 tab" data-item-id="180">6</div>
<div class="col-25 tab" data-item-id="181">7</div>
<div class="col-100 desc" data-desc-id="179">5</div>
<div class="col-100 desc" data-desc-id="180">6</div>
<div class="col-100 desc" data-desc-id="181">7</div>
</div>
Или может вы мне поможете правильно написать цикл вывода
<? foreach($list as $item) : ?>
<div class="col-25 tab" data-item-id="<?=$item->id?>">
...
</div>
<div class="col-100 desc" data-desc-id="<?=$item->id?>">
...
</div>
<? endforeach; ?>
Я уже всю голову сломал пытаясь понять как можно манипулировать итерациями в цикле и выводить по очереди по четыре элемента, при этом сначала выводить четыре tab, потом возвращаться назад и выводить четыре desc с теме же id, потом продолжать и снова возвращаться. Количество блоков может быть любое, но они всегда парные (tab и desc) и должны сортироваться по не более четырём.
Ответы (1 шт):
Автор решения: InDevX
→ Ссылка
Чтобы оперировать итерациями, сперва нужно подготовить массив.
$arr = [
[ 'id' => 1 ],
[ 'id' => 2 ],
[ 'id' => 3 ],
[ 'id' => 4 ],
[ 'id' => 5 ],
[ 'id' => 6 ],
[ 'id' => 7 ],
[ 'id' => 8 ],
];
function prepare(array &$array, int $num): void {
// разбиваем массив по $num эл-тов
$array = array_chunk($array, $num);
$array = array_map(function($item){
// удваиваем кол-во эл-тов у каждом "разбитом" массиве
return array_merge($item, $item);
}, $array);
}
prepare($arr, 4);
foreach($arr as $idx => $item){
// разбиваем массив по 4 эл-та т.к. при подготовке мы их удваивали
$item = array_chunk($item, 4);
foreach($item as $k => $i ) {
// проходим "уже разбитый" массив циклом, и определяем тип (tab, desc)
// для четных\не четных эл-тов
$sub = $k % 2 === 0 ? "tab" : "desc";
foreach($i as $subItem) {
echo $sub . " => " . $subItem['id'] . "\n";
}
}
}