Как сгруппировать массив по значению поля
Короткий ответ
Пройдите массив циклом и складывайте элементы в подмассив с нужным ключом:
<?php
$products = [
['title' => 'Tea', 'category' => 'drinks'],
['title' => 'Bread', 'category' => 'food'],
['title' => 'Coffee', 'category' => 'drinks'],
];
$groups = [];
foreach ($products as $product) {
$groups[$product['category']][] = $product['title'];
}
echo json_encode($groups);Результат:
{"drinks":["Tea","Coffee"],"food":["Bread"]}Количество в каждой группе
Если нужны только числа, хватит array_column() и array_count_values():
<?php
$products = [
['title' => 'Tea', 'category' => 'drinks'],
['title' => 'Bread', 'category' => 'food'],
['title' => 'Coffee', 'category' => 'drinks'],
];
echo json_encode(array_count_values(array_column($products, 'category')));Результат:
{"drinks":2,"food":1}Функции из этого ответа
- array_column — Достаёт значения одного ключа из массива массивов.
- array_count_values — Считает, сколько раз встречается каждое значение.
- array_keys — Возвращает все ключи массива.