Сортировка массива 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));
}