Ломаю голову над такой задачкой.
Есть массив такого вида:
array(
array('earn'=>'12'),
array('earn'=>'15'),
array('earn'=>'10',),
array('earn'=>'9'),
);
earn это достижения пользователя в игре, к примеру, это игровые очки. В данном случае есть 4 пользователя (хотя может быть сколько угодно, от 2 и более), которые закончили игру. Нужно определить победителей и дописать еще 2 ключа.
winner = -1, 1 или 0. Пользователь сыграл вничью, победил или проиграл
award = от 1 до 100. Вознаграждение пользователя в %
Из такого массива
array(
array('earn'=>'12'),
array('earn'=>'15'),
array('earn'=>'10',),
array('earn'=>'9'),
);
Нужно получить вот такой
array(
array('earn'=>'15', 'winner '=> 1, award => 100),
array('earn'=>'12', 'winner '=> 0, award => 0),
array('earn'=>'10', 'winner '=> 0, award => 0),
array('earn'=>'9, 'winner '=> 0', award => 0),
);
Теперь в чем возникает трудность:
Нужно проверить всех пользователей, чтобы выявить явного победителя. То есть если, к примеру, возникает ситуация, когда пользователи набрали одинаковое кол-во очков, нужно правильно распределить данные.
Примеры:Пример 1, Явный победитель:
array(
array('earn'=>'12'),
array('earn'=>'15'),
array('earn'=>'10',),
array('earn'=>'9'),
);
Результат:
array(
array('earn'=>'15', 'winner '=> 1, award => 100),
array('earn'=>'12', 'winner '=> 0, award => 0),
array('earn'=>'10', 'winner '=> 0, award => 0),
array('earn'=>'9, 'winner '=> 0', award => 0),
);
----------------------
Пример 2, Спорная победа:
array(
array('earn'=>'15'),
array('earn'=>'15'),
array('earn'=>'10',),
array('earn'=>'9'),
);
Результат:
array(
array('earn'=>'15', 'winner '=> -1, award => 50),
array('earn'=>'15, 'winner '=> -1, award => 50),
array('earn'=>'10', 'winner '=> 0, award => 0),
array('earn'=>'9, 'winner '=> 0', award => 0),
);
----------------------
Пример 3, Спорная победа 2:
array(
array('earn'=>'15'),
array('earn'=>'15'),
array('earn'=>'15',),
array('earn'=>'9'),
);
Результат:
array(
array('earn'=>'15', 'winner '=> -1, award => 33.33),
array('earn'=>'15, 'winner '=> -1, award => 33.33),
array('earn'=>'15', 'winner '=> -1, award => 33.33),
array('earn'=>'9, 'winner '=> 0', award => 0),
);
----------------------
Пример 4, Общая ничья:
array(
array('earn'=>'15'),
array('earn'=>'15'),
array('earn'=>'15',),
array('earn'=>'15'),
);
Результат:
array(
array('earn'=>'15', 'winner '=> -1, award => 25),
array('earn'=>'15, 'winner '=> -1, award => 25),
array('earn'=>'15', 'winner '=> -1, award => 25),
array('earn'=>'15, 'winner '=> -1', award => 25),
);
В общем, уже весь мозг сломал этой задачкой, никак не получается красиво обходить массив и сформировать нужные данные. Подскажите, пожалуйста, как можно это просто организовать?