Сортировка массива PHP по типу и кратности

Имеется массив

$projects = [
 ['PRICE' => 333, 'TYPE' => 'HOUSE'],
 ['PRICE' => 123, 'TYPE' => 'BATH'],
 ['PRICE' => 222, 'TYPE' => 'HOUSE'],
 ['PRICE' => 432, 'TYPE' => 'HOUSE'],
 ['PRICE' => 111, 'TYPE' => 'BATH'],
 ['PRICE' => 111, 'TYPE' => 'HOUSE'],
 ['PRICE' => 432, 'TYPE' => 'HOUSE'],
 ['PRICE' => 111, 'TYPE' => 'BATH'],
 ['PRICE' => 111, 'TYPE' => 'HOUSE'],

]

Как отсортировать массив так, чтобы был порядок следующий: сначала 3 элемента с типом HOUSE, потом 3 элемента с типом BATH, потом опять HOUSE, после BATH и так далее..?

То есть нужно так:

$projects = [
 ['PRICE' => 333, 'TYPE' => 'HOUSE'],
 ['PRICE' => 432, 'TYPE' => 'HOUSE'],
 ['PRICE' => 111, 'TYPE' => 'HOUSE'],
 ['PRICE' => 123, 'TYPE' => 'BATH'],
 ['PRICE' => 222, 'TYPE' => 'BATH'],
 ['PRICE' => 111, 'TYPE' => 'BATH'],
 ['PRICE' => 432, 'TYPE' => 'HOUSE'],
 ['PRICE' => 111, 'TYPE' => 'HOUSE'],
 ['PRICE' => 111, 'TYPE' => 'HOUSE']
]

Ответы (1 шт):

Автор решения: Michael Chechin
$house = array_chunk(array_filter($projects, fn($v) => $v['TYPE'] === 'HOUSE'), 3);
$bath = array_chunk(array_filter($projects, fn($v) => $v['TYPE'] === 'BATH'), 3);

$projects = [];
while (count($house) || count($bath)) {
    $projects = array_merge($projects, (array)array_shift($house), (array)array_shift($bath));
}
→ Ссылка