PHP массив - Уникальное соответствие - PullRequest
0 голосов
/ 30 мая 2011

Эй, ребята, мне было интересно, не могли бы вы немного помочь мне с моей логикой PHP ...

Я хотел бы создать таблицу лиг на основе следующих данных ..

  • Числовой массив, состоящий из user_ids
  • переменная с числовым значением, указывающим, сколько уникальных игр должно быть сыграно между парой.

Мне нужно создать массив дляотражать каждую уникальную игру ..

player1 vs player2 
player1 vs player2
player1 vs player2

Однако я не хочу, чтобы такие дураки, как

player2 vs player 1 -, превышают максимальный лимит игры, указанный выше в качестве переменной, даже если игрокив другом порядке.

Я действительно изо всех сил пытаюсь обернуть голову вокруг логики этой проблемы, поэтому любая помощь будет великолепна ..

Спасибо,

Ответы [ 2 ]

2 голосов
/ 30 мая 2011

Отслеживайте пары и их совпадения следующим образом:

// $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;
        }
    }
}

$ совпадений будут содержать все уникальные совпадения.

1 голос
/ 30 мая 2011

Я надеюсь, что вы так и сделаете:

$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
...