Как убрать дубликаты из массива массивов по полю
Короткий ответ
array_column() с третьим аргументом делает поле ключом — одинаковые ключи схлопываются:
<?php
$users = [
['email' => 'a@x.com', 'name' => 'Anna'],
['email' => 'b@x.com', 'name' => 'Oleg'],
['email' => 'a@x.com', 'name' => 'Ann'],
];
$unique = array_values(array_column($users, null, 'email'));
echo json_encode(array_column($unique, 'name'));Результат:
["Ann","Oleg"]Оставить первую запись
Способ выше оставляет последнюю из одинаковых. Чтобы сохранить первую, добавляйте запись, только если ключа ещё нет:
<?php
$users = [
['email' => 'a@x.com', 'name' => 'Anna'],
['email' => 'b@x.com', 'name' => 'Oleg'],
['email' => 'a@x.com', 'name' => 'Ann'],
];
$unique = [];
foreach ($users as $user) {
$unique[$user['email']] ??= $user;
}
echo json_encode(array_column($unique, 'name'));Результат:
["Anna","Oleg"]Функции из этого ответа
- array_column — Достаёт значения одного ключа из массива массивов.
- array_values — Возвращает значения массива с ключами по порядку от нуля.
- array_unique — Удаляет из массива повторяющиеся значения.