#php #массивы
Есть массив
$feedbacks = [
['id' => 1023, 'user_id'=> 44393, 'msg'=> 'Comment 1', 'rate' => 5 ],
['id' => 1024, 'user_id'=> 22341, 'msg'=> 'Comment 2', 'rate' => 4 ],
['id' => 1025, 'user_id'=> 22341, 'msg'=> 'Comment 3', 'rate' => 4 ],
['id' => 1026, 'user_id'=> 44393, 'msg'=> 'Comment 4', 'rate' => 2 ],
['id' => 1027, 'user_id'=> 22341, 'msg'=> 'Comment 5', 'rate' => 3 ],
['id' => 1028, 'user_id'=> 75874, 'msg'=> 'Comment 6', 'rate' => 5 ],
['id' => 1029, 'user_id'=> 11223, 'msg'=> 'Comment 7', 'rate' => 1 ],
['id' => 1030, 'user_id'=> 44421, 'msg'=> 'Comment 8', 'rate' => 4 ],
]
Необходимо вывести того, кто больше всех комментариев оставил.
usort($feedbacks, "sorting");
function sorting($a, $b) {
return $a['user_id'] == $b['user_id'];
}
Но тут первым выходит пользователь 44393, а нужен 22341 потому что кол вхождений
3 а у 44393 - 2
Ответы
Ответ 1
Вот так можно, если айдишник. Немного магии: $users = array_count_values(array_column($feedbacks, 'user_id')); asort($users); end( $users); echo(key($users));Ответ 2
Добавлю вариант для версии PHP <= 5.4: $feedbacks = [ ['id' => 1023, 'user_id'=> 44393, 'msg'=> 'Comment 1', 'rate' => 5 ], ['id' => 1024, 'user_id'=> 22341, 'msg'=> 'Comment 2', 'rate' => 4 ], ['id' => 1025, 'user_id'=> 22341, 'msg'=> 'Comment 3', 'rate' => 4 ], ['id' => 1026, 'user_id'=> 44393, 'msg'=> 'Comment 4', 'rate' => 2 ], ['id' => 1027, 'user_id'=> 22341, 'msg'=> 'Comment 5', 'rate' => 3 ], ['id' => 1028, 'user_id'=> 75874, 'msg'=> 'Comment 6', 'rate' => 5 ], ['id' => 1029, 'user_id'=> 11223, 'msg'=> 'Comment 7', 'rate' => 1 ], ['id' => 1030, 'user_id'=> 44421, 'msg'=> 'Comment 8', 'rate' => 4 ] ]; array_walk_recursive($feedbacks, function($v, $k) use(&$user_id) { $k != 'user_id' ?: $user_id[] = $v; }); $user_id = array_count_values($user_id); echo array_flip($user_id)[max($user_id)]; // 22341 Просмотр
Комментариев нет:
Отправить комментарий