Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как убрать дубликаты из массива массивов по полю

Короткий ответ

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 — Удаляет из массива повторяющиеся значения.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.