显示唯一结果并计算重复结果多维数组

Display unique results and count duplicate results multi-dimentional array

这是我的多维数组:

Array
(
    [0] => Array
        (
            [H2H_Id] => T32
            [Team1_Id] => T4
            [Team1] => Juan Arraya - Max LePivert
            [Team2_Id] => T205
            [Team2] => Marco Grangeiro - Jeff Morneau
            [Winners_Id] => T4
            [MatchUps_Id] => M32
        )

    [1] => Array
        (
            [H2H_Id] => T39
            [Team1_Id] => T205
            [Team1] => Marco Grangeiro - Jeff Morneau
            [Team2_Id] => T4
            [Team2] => Juan Arraya - Max LePivert
            [Winners_Id] => T205
            [MatchUps_Id] => M32
        )

    [2] => Array
        (
            [H2H_Id] => T9
            [Team1_Id] => T3
            [Team1] => Marco Grangeiro - George Wilkinson
            [Team2_Id] => T4
            [Team2] => Juan Arraya - Max LePivert
            [Winners_Id] => T4
            [MatchUps_Id] => M9
        )

)

我希望输出为:

Juan Arraya - Max LePivert 1 vs. 1 Marco Grangeiro - Jeff Morneau
Juan Arraya - Max LePivert 1 vs. 0 Marco Grangeiro - George Wilkinson

所以基本上,我想通过使用 MatchUps_Id 分别显示不同的比赛,并打印球队的名称 Team1Team2。基于 Winners_Id 我想添加一个计数器来跟踪每队每场比赛的胜利。

请记住,这些结果来自用户输入,这将使多维数组在每次我请求由 field1field2 传递的用户输入时都不同。

这是我目前的代码:

$query2 = "SELECT HeadToHead.H2HNo H2H_Id, H2HTeam1Id Team1_Id, H2HTeam1 Team1, H2HTeam2Id Team2_Id, H2HTeam2 Team2, WinnersId Winners_Id, MatchUps.MatchUpsNo MatchUps_Id
   FROM HeadToHead
   JOIN MatchUps ON HeadToHead.MatchUpsNo=MatchUps.MatchUpsNo
   WHERE ((H2HTeam1 LIKE '%$field1%' OR H2HTeam2 LIKE '%$field1%') AND (H2HTeam1 LIKE '%$field2%' OR H2HTeam2 LIKE '%$field2%'))";
$result2 = mysql_query($query2);
$num2 = mysql_num_rows($result2);

$arr2 = array();
if($num2 > 0) {
    while($row2 = mysql_fetch_assoc($result2))  {
        $arr2[] = $row2;
    }
}

我从上面的代码得到了想要的结果。

我想我已经对这个问题做了很多研究,但我想要完成的似乎与那里的不同。

非常感谢任何帮助。

您可以像这样 'MatchUps_Id' 将对决组合在一起:

foreach ($arr2 as $match) {

    // create some short ids to make the next part more readable    
    $id = $match['MatchUps_Id'];
    $t1 = $match['Team1_Id'];
    $t2= $match['Team2_Id'];

    if (!isset($matchups[$id][$t1]['name'])) {
        // initialize if this matchup has not yet been created
        $matchups[$id][$t1]['name'] = $match['Team1'];
        $matchups[$id][$t2]['name'] = $match['Team2'];
        $matchups[$id][$t1]['wins'] = (int) ($match['Winners_Id'] == $match['Team1_Id']);
        $matchups[$id][$t2]['wins'] = (int) ($match['Winners_Id'] == $match['Team2_Id']);
    } else {
        // increment wins if the matchup already exists
        $matchups[$id][$t1]['wins'] += $match['Winners_Id'] == $match['Team1_Id'];
        $matchups[$id][$t2]['wins'] += $match['Winners_Id'] == $match['Team2_Id'];      
    }
}

使用 $t1$t2 作为二级键,您可以增加各个团队的获胜次数,而无需知道哪个是哪个。表达式 $match['Winners_Id'] == $match['Team1_Id'] returns 一个布尔值,当与 += 一起使用时将隐式转换为整数 01,但必须使用 (int) 初始化时.

对数组进行分组并计算获胜次数后,您可以像这样输出结果:

foreach ($matchups as $matchup) {
    list($a, $b) = array_values($matchup);
    echo "$a[name] $a[wins] vs. $b[wins] $b[name]<br>";
}