Функция 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
Сервис, предоставляющий широкий спектр услуг в области веб-хостинга и виртуальных серверов.