2016-08-02 25 views
1

Hier ist meine mehrdimensionales Array:Anzeige einzigartige Ergebnisse und zählen doppelte Ergebnisse multi-dimensionales 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 
     ) 

) 

Ich möchte die Ausgabe sein:

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

Also im Grunde möchte ich zeigen die verschiedenen Match-Ups separat mit MatchUps_Id und drucken Sie die Namen der Teams Team1 und Team2. Basierend auf der Winners_Id möchte ich einen Zähler hinzufügen, um die Gewinne pro Team pro Spiel zu verfolgen.

Denken Sie daran, dass diese Ergebnisse von Benutzereingaben stammen, die das mehrdimensionale Array jedes Mal anders aussehen lassen, wenn ich eine Eingabe von field1 und field2 über den Benutzer abfrage.

Das ist, was ich bisher in Code haben:

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

ich die gewünschten Ergebnisse aus dem obigen Code erhalten.

Ich denke, ich habe viel über diese Angelegenheit geforscht, aber was ich versuche zu erreichen scheint anders zu sein als das, was da draußen ist.

Jede Hilfe wird sehr geschätzt.

Antwort

1

Sie können Gruppe die Matchups zusammen durch 'MatchUps_Id' wie folgt aus:

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'];  
    } 
} 

Mit $t1 und $t2 als Second-Level-Tasten Sie die Gewinnzähler für die jeweiligen Teams zu erhöhen, ermöglicht, ohne zu wissen, was man denen. Der Ausdruck $match['Winners_Id'] == $match['Team1_Id'] gibt einen booleschen Wert zurück, der bei Verwendung mit += implizit in eine Ganzzahl 0 oder 1 umgewandelt wird. Bei der Initialisierung muss er jedoch explizit mit (int) umgewandelt werden.

Nachdem Sie Ihre Array gruppiert haben und zählte die Gewinne, können Sie geben die Ergebnisse wie folgt aus:

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

Das war perfekt, keine Panik! Vielen Dank! Ich habe Probleme zu verstehen, wie man ein mehrdimensionales Array manipuliert. Wenn Sie irgendwelche Ressourcen haben, die ich darüber lesen kann, bitte geben Sie es weiter. Danke nochmal –

+0

Gern geschehen. Ich kenne keine besonderen Lesefähigkeiten, aber ich kann versuchen, einen Ratschlag zu geben. Wenn ich auf ein Problem wie dieses festsitze, ist es oft hilfreich, manuell ein Beispiel für das Ergebnis zu erstellen, das ich erreichen möchte, und rückwärts von diesem zum Ausgangspunkt zu arbeiten. Für mich macht es leichter, etwas zu sehen, was ich sehen kann, anstatt zu versuchen, alles in meinem Kopf zu machen. –

+0

Das macht Sinn. Wieder schätze ich die Hilfe –