#php #arrays #logic #numeric
#php #массивы #Логические #числовой
Вопрос:
Привет, ребята, мне было интересно, не могли бы вы немного помочь мне с моей PHP-логикой…
Я хотел бы сгенерировать таблицу ранжирования на основе следующих данных..
- Числовой массив, состоящий из идентификаторов пользователя
- переменная с числовым значением, указывающим, сколько уникальных игр должно быть сыграно между парой..
Мне нужно создать массив, отражающий каждую уникальную игру..
player1 vs player2
player1 vs player2
player1 vs player2
Однако я не хочу дубликатов, таких как
player2 vs player 1 -
Это превысило бы максимальный лимит игры, указанный выше в качестве переменной, даже если игроки находятся в другом порядке.
Я действительно изо всех сил пытаюсь разобраться в логике этой проблемы, поэтому любая помощь была бы отличной..
Спасибо,
Комментарии:
1. как насчет «самодельного» правила, согласно которому игрок с более низким идентификатором пользователя всегда приходит первым? Как игрок 1000 против игрока 1001?
Ответ №1:
Отслеживайте пары и их совпадения следующим образом:
// $players - the players width ids
// $num_of_matches - max number of matches between 2 players
$match_counter = array();
$matches = array();
foreach ($players as $idA)
{
foreach ($players as $idB)
{
if ($idA != $idB)
{
$match_id = $idA < $idB ? $idA."vs".$idB : $idB."vs".$idA;
if (empty($match_counter[$match_id]))
$match_counter[$match_id] = 1
elseif ($match_counter[$match_id] < $num_of_matches)
$match_counter[$match_id] = 1;
$match_id .= "_".$match_counter[$match_id];
$matches[$match_id] = "player".$idA." vs player".$idB;
}
}
}
$matches будет содержать все уникальные соответствия.
Ответ №2:
я надеюсь, что вы улучшите это таким образом:
$players = array(1, 2, 3);
$games = 3;
for($i=0; $i<$games; $i ){
for($j=0; $j<(count($players)-1); $j ){
for($k=1; $k<count($players); $k ){
if($j != $k)
echo 'player' . $players[$j] . ' - player' . $players[$k] . '<br />';
}
}
}
ВОЗВРАТ:
player1 - player2
player1 - player3
player2 - player3
player1 - player2
player1 - player3
player2 - player3
player1 - player2
player1 - player3
player2 - player3