Как сгруппировать массив ассоциативных массивов по ключу в PHP

Иногда группирования по функции SQL недостаточно для группировки некоторых данных в соответствии с вашими потребностями. Какова бы ни была причина, вы в любом случае сможете сгруппировать данные так, как вам удобно, с языком программирования по вашему выбору. Например, в PHP можно сгруппировать ассоциативный массив по некоторому ключу, поэтому вы сможете отображать его данные по некоторому порядку (группе).

В этой статье мы поделимся с вами небольшим фрагментом, который позволяет группировать элементы массива по некоторому ключу.

Группировать по функциям

Следующая функция создает новый массив, в котором хранятся все данные исходного входного массива с ассоциативной структурой. Он повторяется один раз, создавая новый ключ для нового массива со значением данных с указанным ключом (поэтому, когда появляется новый элемент с тем же значением, он будет вставлен в этот ключ). Если элемент входного массива не содержит определенный ключ, он будет помещен в пустой ключ строки нового массива:

использование

Рассмотрим следующую структуру данных:

 1,
"name" => "Bruce Wayne",
"city" => "Gotham",
"gender" => "Male"
),
array(
"id" => 2,
"name" => "Thomas Wayne",
"city" => "Gotham",
"gender" => "Male"
),
array(
"id" => 3,
"name" => "Diana Prince",
"city" => "New Mexico",
"gender" => "Female"
),
array(
"id" => 4,
"name" => "Speedy Gonzales",
"city" => "New Mexico",
"gender" => "Male"
)
);

У нас есть 4 простых элемента, и мы хотим сгруппировать их по одному свойству, например по полу, поэтому наш код для группировки наших данных по этому ключу будет выглядеть так:

" . var_export($byGroup, true) . "

";

Вынесенный массив будет иметь следующую структуру:

array (
'Male' =>
array (
0 =>
array (
'id' => 1,
'name' => 'Bruce Wayne',
'city' => 'Gotham',
'gender' => 'Male',
),
1 =>
array (
'id' => 2,
'name' => 'Thomas Wayne',
'city' => 'Gotham',
'gender' => 'Male',
),
2 =>
array (
'id' => 4,
'name' => 'Speedy Gonzales',
'city' => 'New Mexico',
'gender' => 'Male',
),
),
'Female' =>
array (
0 =>
array (
'id' => 3,
'name' => 'Diana Prince',
'city' => 'New Mexico',
'gender' => 'Female',
),
),
)

Как видите, вы получите новый ассоциативный массив со всеми возможными значениями выбранного ключа (в данном случае пола) ваших данных, поэтому у нас есть 2 группы, а именно Мужская и Женская. Вы будете соблюдать ту же логику, если группируете по другому свойству, например по городу:

" . var_export($byGroup, true) . "

";

Чей вывод будет:

array (
'Gotham' =>
array (
0 =>
array (
'id' => 1,
'name' => 'Bruce Wayne',
'city' => 'Gotham',
'gender' => 'Male',
),
1 =>
array (
'id' => 2,
'name' => 'Thomas Wayne',
'city' => 'Gotham',
'gender' => 'Male',
),
),
'New Mexico' =>
array (
0 =>
array (
'id' => 3,
'name' => 'Diana Prince',
'city' => 'New Mexico',
'gender' => 'Female',
),
1 =>
array (
'id' => 4,
'name' => 'Speedy Gonzales',
'city' => 'New Mexico',
'gender' => 'Male',
),
),
)
Ссылка на основную публикацию
Adblock
detector