PHP检查数组是否有重复项

时间:2018-05-06 16:20:21

标签: php arrays

十名球员和我需要两轮比赛的球员。这很好但问题是第一轮和第二轮可能有相同的匹配。即:

8 - 10
2 - 5
4 - 3
9 - 7 !!
6 - 1

2 - 4
5 - 10
8 - 1
3 - 6
7 - 9 !!

如你所见,同样的比赛两次9比7比7比7比9.这是我应该防止的。在前两轮中,相同的球员不应该面对面。怎么预防呢?这段代码创建了draw:

$lkm = 10;

//-------------- first round:    
$eka = range(1, $lkm);
shuffle($eka);

         for ($key = 0; $key <= $lkm/2-1; $key++) {
                echo $eka[$key] . " - " . $eka[$lkm/2+$key] . "<br>";
            }


//-------------- second round:
echo "<br>";
$toka = range(1, $lkm);
shuffle($toka);

         for ($key = 0; $key <= $lkm/2-1; $key++) {
                echo $toka[$key] . " - " . $toka[$lkm/2+$key] . "<br>";
            }

1 个答案:

答案 0 :(得分:1)

使用shuffle您将无法控制数组元素的位置。当然,除非是洗牌并再次洗牌。

我的建议是,一次洗牌,并为第1轮和第2轮使用不同的匹配逻辑。

示例:

你有洗牌阵列:

[0] => 2
[1] => 5
[2] => 10
[3] => 6
[4] => 9
[5] => 4
[6] => 1
[7] => 8
[8] => 3
[9] => 7

在第1轮,您可以使用相邻元素进行配对。喜欢:

[0] => 2  -| Pair
[1] => 5  -|

[2] => 10 -| Pair
[3] => 6  -|

[4] => 9  -| Pair
[5] => 4  -|

..... And so on

第二轮:上半场与下半场配对。元素0 - 4是前半部分,5 - 9是第二个。所以配对 0和5 1和6

[0] => 2------|
[1] => 5      |Pair
[2] => 10     |
[3] => 6 -----|--------|
[4] => 9      |        |Pair
[5] => 4------|        |
[6] => 1               |
[7] => 8               |
[8] => 3---------------|
[9] => 7

以下是代码:

$lkm = 10;                  
$players = range(1, $lkm);
shuffle($players);  //Shuffle only once

//Round 1 - Adjacent in order 1 vs 2, 3 vs 4
$round1 = array();
for ( $key = 0; $key < $lkm; $key = $key + 2 ) {
    //$players[$key] Vs $players[$key + 1]
    $round1[] = array( $players[$key], $players[$key + 1]);
}

//Round 2 - First half vs 2nd half.
$round2 = array();
for ( $key = 0; $key < ($lkm / 2) ; $key++) {
    //$players[$key] Vs $players[ $key + ($lkm / 2) ]
    $round2[] = array( $players[$key], $players[ $key + ($lkm / 2) ]);
}