Массив PHP — уникальное соответствие

#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