Вот один из способов найти дубликаты сообщений.Сначала мы находим неуникальных пользователей, проверяя количество значений user
.Затем мы фильтруем сообщения в $messages
, проверяя, находится ли user
в массиве неуникальных пользователей:
$non_unique_users = array_filter(array_count_values(array_column($messages, 'user')), function ($v) { return $v != 1; });
$duplicate_messages = array_filter($messages, function ($v) use($non_unique_users) { return array_key_exists($v['user'], $non_unique_users); });
print_r($duplicate_messages);
Вывод:
Array (
[2] => Array ( [user] => user1 [sending_time] => 1536513874 [read_time] => 1536567672 [content] => def [recipient_status] => read )
[3] => Array ( [user] => user1 [sending_time] => 1536513532 [read_time] => 1536513745 [content] => abc [recipient_status] => read )
)
Демонстрация включена3v4l.org
Обновление
Чтобы просто вернуть массив ключей user
, вы можете применить array_map
к массиву $duplicate_messages
:
$duplicate_users = array_map(function ($v) { return array('user' => $v['user']); }, $duplicate_messages);
или вы можете получить его непосредственно из массивов $messages
и $non_unique_users
:
$duplicate_users = array_map(function ($v) use($non_unique_users) { if (array_key_exists($v['user'], $non_unique_users)) return array('user' => $v['user']); }, $duplicate_messages);
В обоих случаях выводом будет
Array (
[2] => Array ( [user] => user1 )
[3] => Array ( [user] => user1 )
)
Демонстрация на 3v4l.org