array_column() — суперудобная функция в PHP, особенно когда ты работаешь с массивами массивов (например, из базы данных или JSON).
Что делает array_column()
Она вытаскивает один столбец (значения по определённому ключу) из массива массивов.
Простой пример
$users = [
['id' => 1, 'name' => 'Alice'],
['id' => 2, 'name' => 'Bob'],
['id' => 3, 'name' => 'Charlie'],
];
$names = array_column($users, 'name');
print_r($names);
// Вывод
Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
)
С указанием $index_key
$names_by_id = array_column($users, 'name', 'id');
print_r($names_by_id);
// Вывод
Array
(
[1] => Alice
[2] => Bob
[3] => Charlie
)
Теперь ты можешь быстро обратиться к имени по ID:
echo $names_by_id[2]; // Bob
Пример: ищем по ID
$user_ids = array_column($users, 'id');
if (in_array(2, $user_ids)) {
echo "User with ID 2 exists!";
}
Сортировка массива по колонке с помощью array_column() + array_multisort()
Пример: сортировка пользователей по возрасту
$users = [
['id' => 1, 'name' => 'Alice', 'age' => 32],
['id' => 2, 'name' => 'Bob', 'age' => 25],
['id' => 3, 'name' => 'Charlie', 'age' => 40],
];
// Вытаскиваем колонку с возрастами
$ages = array_column($users, 'age');
// Сортируем $users по $ages
array_multisort($ages, SORT_ASC, $users);
print_r($users);
// Вывод
Array
(
[0] => Array ( [id] => 2 [name] => Bob [age] => 25 )
[1] => Array ( [id] => 1 [name] => Alice [age] => 32 )
[2] => Array ( [id] => 3 [name] => Charlie [age] => 40 )
)
Это очень удобный способ сортировать массив по любой колонке — имя, дата, цена, и т.д.
Группировка по колонке (например, по роли, категории)
array_column() сам по себе не группирует, но помогает подготовить данные. Дальше используем обычный foreach.
Пример: группировка пользователей по роли
$users = [
['id' => 1, 'name' => 'Alice', 'role' => 'admin'],
['id' => 2, 'name' => 'Bob', 'role' => 'editor'],
['id' => 3, 'name' => 'Charlie', 'role' => 'admin'],
['id' => 4, 'name' => 'Dave', 'role' => 'viewer'],
];
$grouped = [];
foreach ($users as $user) {
$grouped[$user['role']][] = $user;
}
print_r($grouped);
// Вывод
Array
(
[admin] => Array
(
[0] => Array ( [id] => 1 [name] => Alice [role] => admin )
[1] => Array ( [id] => 3 [name] => Charlie [role] => admin )
)
[editor] => Array
(
[0] => Array ( [id] => 2 [name] => Bob [role] => editor )
)
[viewer] => Array
(
[0] => Array ( [id] => 4 [name] => Dave [role] => viewer )
)
)
Пример: Группировка пользователей по role с array_reduce()
$users = [
['id' => 1, 'name' => 'Alice', 'role' => 'admin'],
['id' => 2, 'name' => 'Bob', 'role' => 'editor'],
['id' => 3, 'name' => 'Charlie', 'role' => 'admin'],
['id' => 4, 'name' => 'Dave', 'role' => 'viewer'],
];
$grouped = array_reduce($users, function($carry, $user) {
$carry[$user['role']][] = $user;
return $carry;
}, []);
// Вывод
Array
(
[admin] => Array
(
[0] => Array ( [id] => 1, [name] => Alice, [role] => admin )
[1] => Array ( [id] => 3, [name] => Charlie, [role] => admin )
)
[editor] => Array
(
[0] => Array ( [id] => 2, [name] => Bob, [role] => editor )
)
[viewer] => Array
(
[0] => Array ( [id] => 4, [name] => Dave, [role] => viewer )
)
)
А array_column() тут можно использовать для вспомогательных целей
Например, получить список всех ролей:
$roles = array_column($users, 'role');
$unique_roles = array_unique($roles);
print_r($unique_roles);
// Вывод
Array ( [0] => admin [1] => editor [3] => viewer )
Хочешь круче?
Можно написать функцию groupBy() на основе array_reduce() и использовать её где угодно:
function groupBy(array $array, string $key): array {
return array_reduce($array, function($carry, $item) use ($key) {
$carry[$item[$key]][] = $item;
return $carry;
}, []);
}
// Использование:
$groupedUsers = groupBy($users, 'role');
