Метод countBy
Метод countBy применяется к коллекции и возвращает новую коллекцию, где ключами являются значения из указанного поля или результаты работы callback-функции, а значениями - количество элементов, соответствующих каждому ключу. Первым параметром передаётся callback-функция или имя ключа, по которому производится группировка и подсчёт.
Синтаксис
<?php
$collection->countBy($callback);
?>
Пример
Подсчитаем количество элементов в коллекции по их значениям:
<?php
$collection = collect(['a', 'b', 'a', 'c', 'b', 'b']);
$res = $collection->countBy();
print_r($res->toArray());
?>
Результат выполнения кода:
["a" => 2, "b" => 3, "c" => 1]
Пример
Подсчитаем количество элементов, используя callback-функцию для определения ключа:
<?php
$collection = collect([1, 2, 3, 4, 5, 6]);
$res = $collection->countBy(function ($item) {
return $item % 2 == 0 ? 'even' : 'odd';
});
print_r($res->toArray());
?>
Результат выполнения кода:
["odd" => 3, "even" => 3]
Пример
Подсчитаем количество элементов по определённому ключу в коллекции объектов:
<?php
$collection = collect([
['type' => 'article', 'status' => 'published'],
['type' => 'user', 'status' => 'active'],
['type' => 'article', 'status' => 'draft'],
['type' => 'user', 'status' => 'active'],
['type' => 'category', 'status' => 'active'],
]);
$res = $collection->countBy('status');
print_r($res->toArray());
?>
Результат выполнения кода:
["published" => 1, "active" => 3, "draft" => 1]
Пример
Подсчитаем количество элементов по длине строки с помощью callback-функции:
<?php
$collection = collect(['abc', 'de', 'fgh', 'ij', 'klmn', 'op']);
$res = $collection->countBy(function ($item) {
return strlen($item);
});
print_r($res->toArray());
?>
Результат выполнения кода:
[2 => 3, 3 => 2, 4 => 1]