Есть массив:
[users] => Array
(
[0] => Array
(
[hash] => de2983f989ccf1ea09d1e29a0465fb51
[earn] => 32
)
[1] => Array
(
[hash] => ef21eb9ea4b5dc9f359024198bf40742
[earn] => 23
)
[2] => Array
(
[hash] => fff294012895b487157efd570232f0fc
[earn] => 22
)
[3] => Array
(
[hash] => 3bf51dd7bb302ccf81e335879b97bc5b
[earn] => 12
)
)
К примеру 4 пользователя играли в игру, игра закончилось и нужно подвести итоги, а именно записать кучу логов в историю и посчитать всем рейтинг.
hash - идентификатор пользователя
earn - достижения в игре. К примеру очки.
Прежде всего входящий массив я сортирую по достижениям:usort($enter_data['users'], function($a, $b) {
if ($a['earn'] == $b['earn']) {
return 0;
}
return ($a['earn'] > $b['earn']) ? -1 : 1;
});
Дальше есть вопросы как продолжать работать с массивом. А именно:
К примеру закончилась игра в карты на 4 игроков, пришел массив с их очками, мы его отсортировали (от большего к меньшему) и нам нужно определить победителя(лей).
1) Как лучше оптимально определить победителя
у нас есть флаг ($allocationToWinner = true or false)
true - победитель тот кто набрал большее кол-во очков. даем ему 100% рейтинга
false - победитель 1 и 2 место, отношение рейтинга 70 / 30 (1 место получает 70%, 2 30% рейтинга)
2) если пользователи набрали очки к примеру вот так (тут $allocationToWinner игнорируется):
user1 = 50
user2 = 50
user3 = 20
user4 = 20
В таком случае, нужно user1 и user2 дать по 50% рейтинга и сделать флаг, о том что ничья у user1 и user2
3) если пользователи набрали очки к примеру вот так ($allocationToWinner = true, отдаем весь рейтинг user1, $allocationToWinner = false, делим 30% рейтинга между user2 и user3):
user1 = 50
user2 = 40
user3 = 40
user4 = 20
В чем возникли сложности:
Пробовал все это сделать в 1 цикле, в результате вышло очень много проверок и сам же в них запутался.
Подскажите пожалуйста как лучше всего выполнить вышенаписанные действия ?