Функция group_by($array, $key)

Описание: Данная функция предназначена для группировки элементов массива по определенному ключу.

Параметры:

  • $array (обязательный): Массив, который нужно сгруппировать. Может содержать любые типы данных.
  • $key (обязательный): Ключ, по которому производится группировка. Может быть либо строкой (имя ключа массива), либо функцией, принимающей элемент массива в качестве аргумента и возвращающей новый ключ для группировки.

Возвращаемое значение: Функция возвращает новый массив, содержащий сгруппированные элементы. Каждый элемент нового массива представляет собой подмассив, содержащий элементы из исходного массива, сгруппированные по заданному ключу.

Пример использования:

$users = [
    ['name' => 'John', 'age' => 25, 'city' => 'New York'],
    ['name' => 'Alice', 'age' => 30, 'city' => 'London'],
    ['name' => 'Bob', 'age' => 25, 'city' => 'New York'],
    ['name' => 'Eve', 'age' => 30, 'city' => 'London'],
];

// Группировка по ключу 'age'
$result = group_by($users, 'age');
print_r($result);
/*
Результат:
Array
(
    [25] => Array
        (
            [0] => Array
                (
                    [name] => John
                    [age] => 25
                    [city] => New York
                )

            [1] => Array
                (
                    [name] => Bob
                    [age] => 25
                    [city] => New York
                )

        )

    [30] => Array
        (
            [0] => Array
                (
                    [name] => Alice
                    [age] => 30
                    [city] => London
                )

            [1] => Array
                (
                    [name] => Eve
                    [age] => 30
                    [city] => London
                )

        )

)
*/

// Группировка по пользовательской функции
$groupByCity = function ($user) {
    return $user['city'];
};

$result = group_by($users, $groupByCity);
print_r($result);
/*
Результат:
Array
(
    [New York] => Array
        (
            [0] => Array
                (
                    [name] => John
                    [age] => 25
                    [city] => New York
                )

            [1] => Array
                (
                    [name] => Bob
                    [age] => 25
                    [city] => New York
                )

        )

    [London] => Array
        (
            [0] => Array
                (
                    [name] => Alice
                    [age] => 30
                    [city] => London
                )

            [1] => Array
                (
                    [name] => Eve
                    [age] => 30
                    [city] => London
                )

        )

)
*/

Примечания:

  • Если ключ $key является функцией, то она должна быть определена до вызова функции group_by(), либо быть доступной в глобальной области видимости.
  • Если элементы массива имеют одинаковые значения для ключа группировки, они будут объединены в одну группу.
  • Если ключ $key не существует для какого-либо элемента массива, то этот элемент будет пропущен при группировке.

Важно:

  • Функция group_by() является пользовательской функцией, а не встроенной функцией PHP.
  • Перед использованием этой функции убедитесь, что переданные в нее аргументы соответствуют описанным требованиям.
<?php
function group_by($array, $key) {
    $result = array();
    foreach ($array as $element) {
        if(is_callable($key)) {
            $new_key = $key($element);
            $result[$new_key][] = $element;
        } else {

            $result[$element[$key]][] = $element;
        }
    }
    return $result;
}

Проверенный хостинг

Beget

Международный хостинг-провайдер, аккредитованный национальный и международный регистратор доменных имён.

Timeweb

Сервис, предоставляющий широкий спектр услуг в области веб-хостинга и виртуальных серверов.

Заказать кастомную разработку

Корпоративные порталы
  • Веб-дизайн
  • Фронт-энд
  • Бэк-энд
  • Контент
  • PM
Мобильные приложения
  • Веб-дизайн
  • Фронт-энд
  • Бэк-энд
  • Контент
  • PM
Разработка ИТ-продукта
  • Веб-дизайн
  • Фронт-энд
  • Бэк-энд
  • Контент
  • PM