显示独特的结果并计算重复结果的多维数组

时间:2016-08-02 19:45:15

标签: php multidimensional-array user-input

这是我的多维数组:

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

我希望输出为:

MatchUps_Id

所以基本上,我想使用Team1分别显示不同的匹配,并打印团队Team2Winners_Id的名称。基于field1我想添加一个计数器来跟踪每场比赛每队的胜利。

请注意,这些结果来自用户输入,每当我请求field2$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; } } 传递的用户输入时,多维数组就会不同。

这是我目前在代码中所拥有的:

class base (
  $someBoolean=false,
)
{
  exec { 'Do something':
    command     => '/usr/bin/someStuff',
    timeout     => (someBoolean) ? 100000000 : 300
  }
}

我从上面的代码中得到了所需的结果。

我想我已就这件事做了很多研究,但我想要完成的事情似乎与那里的不同。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

你可以按照'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']返回一个布尔值,当与0一起使用时,它将隐式转换为整数1+=,但必须使用(int)显式转换初始化时。

在对数组进行分组并计算胜利后,您可以输出如下结果:

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