РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
996 of 1392 menu

Метод groupBy

Метод groupBy применяется к коллекции и группирует её элементы по указанному ключу или результату callback-функции. Этот метод часто используется для агрегации данных, полученных из базы данных, или для организации данных в структурированном виде. В качестве первого параметра передаётся ключ для группировки или callback-функция, которая определяет критерий группировки.

Синтаксис

<?php $collection->groupBy($key); $collection->groupBy(callable $callback); ?>

Пример

Давайте сгруппируем массив пользователей по их статусу:

<?php use Illuminate\Support\Collection; $users = new Collection([ ['name' => 'John', 'status' => 'active'], ['name' => 'Jane', 'status' => 'inactive'], ['name' => 'Bob', 'status' => 'active'], ['name' => 'Alice', 'status' => 'pending'], ['name' => 'Tom', 'status' => 'inactive'] ]); $res = $users->groupBy('status'); foreach ($res as $status => $users) { echo "Status: $status" . PHP_EOL; foreach ($users as $user) { echo " - " . $user['name'] . PHP_EOL; } } ?>

Результат выполнения кода:

"Status: active" " - John" " - Bob" "Status: inactive" " - Jane" " - Tom" "Status: pending" " - Alice"

Пример

Давайте сгруппируем числа по их чётности:

<?php use Illuminate\Support\Collection; $collection = new Collection([1, 2, 3, 4, 5, 6, 7, 8, 9]); $res = $collection->groupBy(function ($item) { return $item % 2 == 0 ? 'even' : 'odd'; }); foreach ($res as $type => $items) { echo $type . ': ' . implode(', ', $items->toArray()) . PHP_EOL; } ?>

Результат выполнения кода:

"odd: 1, 3, 5, 7, 9" "even: 2, 4, 6, 8"

Пример

Сгруппируем записи из базы данных по категориям с использованием Eloquent:

<?php namespace App\Http\Controllers; use App\Models\Article; use Illuminate\Http\Request; class ArticleController extends Controller { public function index() { $articles = Article::all(); $res = $articles->groupBy('category'); foreach ($res as $category => $items) { echo "Category: $category" . PHP_EOL; foreach ($items as $article) { echo " - " . $article->title . PHP_EOL; } } } } ?>

Результат выполнения кода:

"Category: Technology" " - Laravel 11 Features" " - PHP 8.3 Best Practices" "Category: Design" " - UX Design Principles" " - Color Theory Guide"

Пример

Используем группировку с преобразованием данных с помощью метода map:

<?php use Illuminate\Support\Collection; $orders = new Collection([ ['id' => 1, 'customer' => 'John', 'amount' => 100], ['id' => 2, 'customer' => 'Jane', 'amount' => 200], ['id' => 3, 'customer' => 'John', 'amount' => 150], ['id' => 4, 'customer' => 'Bob', 'amount' => 300], ['id' => 5, 'customer' => 'Jane', 'amount' => 250] ]); $res = $orders->groupBy('customer') ->map(function ($items) { return $items->sum('amount'); }); foreach ($res as $customer => $total) { echo "$customer: $$total" . PHP_EOL; } ?>

Результат выполнения кода:

"John: $250" "Jane: $450" "Bob: $300"

Пример

Группировка по вложенному свойству с помощью точечной нотации:

<?php use Illuminate\Support\Collection; $data = new Collection([ ['user' => ['name' => 'John', 'city' => 'NYC'], 'score' => 90], ['user' => ['name' => 'Jane', 'city' => 'LA'], 'score' => 85], ['user' => ['name' => 'Bob', 'city' => 'NYC'], 'score' => 95], ['user' => ['name' => 'Alice', 'city' => 'LA'], 'score' => 88] ]); $res = $data->groupBy('user.city'); foreach ($res as $city => $items) { echo "City: $city" . PHP_EOL; foreach ($items as $item) { echo " - " . $item['user']['name'] . ' (score: ' . $item['score'] . ')' . PHP_EOL; } } ?>

Результат выполнения кода:

"City: NYC" " - John (score: 90)" " - Bob (score: 95)" "City: LA" " - Jane (score: 85)" " - Alice (score: 88)"

Смотрите также

  • метод sortBy,
    который сортирует коллекцию по указанному ключу
  • метод keyBy,
    который преобразует коллекцию в массив с ключами
  • метод filter,
    который фильтрует коллекцию по заданному условию
  • метод map,
    который преобразует каждый элемент коллекции
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить