foreach frage !!!

Harmomix

Mitglied
Es geht um folgendes ich habe eine Ausgabe für einen Spielplan , es ist möglich das ein Team an einen Spieltag Spielfrei hat wenn es eine ungerade zahl an Teams gibt. Ich erstelle den Spielplan mit einer foreach Anweisung nun möchte ich aber das wenn es ein Spiel gibt wo ein Team Spielfrei hat dieses unter der Tabelle anzeigen und nicht in der Tabelle :

meine Idee war 2 mysql abfragen zu machen eine wo die Spiele ausgelesen werden die stattfinden und eine wo nur das Spiel ausgelesen wird was in Teamheim oder teamaus Spielfrei drin steht diese beiden in arrays zu stecken und dann anzuzeigen.

php code für die gesamte anzeige der Spieltag

PHP:
$sql = "
   select *
   from mhdl_liga
   where liga = 'c1' and saison = ".SAISON." and teamheim != 'Spielfrei' and teamaus != 'Spielfrei'
   order by runde asc";

$rs = mysqli_query($db_link, $sql);

//Array mit allen Runden => Spiele definieren
$runden = array();
while ($zeile = mysqli_fetch_array( $rs, MYSQL_ASSOC)){
    $runden[$zeile['runde']][] = $zeile;
}

$sql1 = "
   select *
   from mhdl_liga
   where liga = 'c1' and saison = ".SAISON." and teamheim = 'Spielfrei' or teamaus = 'Spielfrei'
   order by runde asc";

$rs1 = mysqli_query($db_link, $sql1);

//Array mit allen Runden => Spiele definieren
$frei = array();
while ($zeile = mysqli_fetch_array( $rs1, MYSQL_ASSOC)){
    $frei[$zeile['runde']][] = $zeile;
}

//Und dann den Rundenarray ausgeben
foreach($runden as $runde => $spiel){
    foreach($frei as $runde => $freiis){
       
    echo "<h3><center>Spieltag {$runde}</h3>";
    echo("<center><table border=\"1\">\n");
    echo "<tr class=colorGrey><th>Spieltag</th><th>Heimteam</th><th>Auswärtsteam</th><th>Spielort</th><th>Spieltag</th><th>Anwurf</th><th>Verlegt</th></tr>";
     
    foreach($spiel as $spiele){
      echo "<tr>";
      echo "<td>{$spiele['runde']}</td>";
      echo "<td>{$spiele['teamheim']}</td>";
      echo "<td>{$spiele['teamaus']}</td>";
      echo "<td>{$spiele['lokal']}</td>";
      echo "<td>{$spiele['datum']}</td>";
      echo "<td>{$spiele['time']}</td>";
      echo "<td>{$spiele['verlegt']}</td>";
      echo "</tr>";
    }
    echo "</table>";
    foreach($frei as $runde => $freiis){
    foreach($freiis as $freisein){
        if ($freisein['teamheim'] != 'Spielfrei') {
            echo "Spielfrei : <td> {$freisein['teamheim']}</td>";
        }else{
            echo "Spielfrei :<td>{$freisein['teamaus']}</td>";
        }


    }
}
}

Leider klappt das so nicht da anscheinend die beiden foreach schleifen nicht zusammen gehen bzw die erste gestoppt wird und nur der erste Spieltag angezeigt wird und das 14 mal.......

Sorry hab den falschen code gepostet

PHP:
$sql = "
   select *
   from mhdl_liga
   where liga = 'c1' and saison = ".SAISON." and teamheim != 'Spielfrei' and teamaus != 'Spielfrei'
   order by runde asc";

$rs = mysqli_query($db_link, $sql);

//Array mit allen Runden => Spiele definieren
$runden = array();
while ($zeile = mysqli_fetch_array( $rs, MYSQL_ASSOC)){
    $runden[$zeile['runde']][] = $zeile;
}

$sql1 = "
   select *
   from mhdl_liga
   where liga = 'c1' and saison = ".SAISON." and teamheim = 'Spielfrei' or teamaus = 'Spielfrei'
   order by runde asc";

$rs1 = mysqli_query($db_link, $sql1);

//Array mit allen Runden => Spiele definieren
$frei = array();
while ($zeile = mysqli_fetch_array( $rs1, MYSQL_ASSOC)){
    $frei[$zeile['runde']][] = $zeile;
}

//Und dann den Rundenarray ausgeben
foreach($runden as $runde => $spiel){
    foreach($frei as $runde => $freiis){
      
    echo "<h3><center>Spieltag {$runde}</h3>";
    echo("<center><table border=\"1\">\n");
    echo "<tr class=colorGrey><th>Spieltag</th><th>Heimteam</th><th>Auswärtsteam</th><th>Spielort</th><th>Spieltag</th><th>Anwurf</th><th>Verlegt</th></tr>";
    
    foreach($spiel as $spiele){
      echo "<tr>";
      echo "<td>{$spiele['runde']}</td>";
      echo "<td>{$spiele['teamheim']}</td>";
      echo "<td>{$spiele['teamaus']}</td>";
      echo "<td>{$spiele['lokal']}</td>";
      echo "<td>{$spiele['datum']}</td>";
      echo "<td>{$spiele['time']}</td>";
      echo "<td>{$spiele['verlegt']}</td>";
      echo "</tr>";
    }
    echo "</table>";

    foreach($freiis as $freisein){
        if ($freisein['teamheim'] != 'Spielfrei') {
            echo "Spielfrei : <td> {$freisein['teamheim']}</td>";
        }else{
            echo "Spielfrei :<td>{$freisein['teamaus']}</td>";
    }
}
}
}
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

es werden keine 2 Datenbankverbindungen benötigt.

Inhaltlich lassen sich die Datensätze via if-Else filtern.

1. 1x forEach => runden
1.1. 1x forEach => spiele
2. if-Else welche auf != Spielfrei und == Spielfrei filtert und in unterschiedliche variablen/arrays speichert
3. Variablen/Arrays zusammenführen und ausgeben.

Sollte Dir das nicht helfen, so häng bitte mal die relevanten MySQL-Tabellen mit an.

Viele Grüße
 
Ich bekomme es nicht hin kann mir jemand ein Beispiel Posten mit if-Else welche auf != Spielfrei und == Spielfrei filtert und in unterschiedliche variablen/arrays speichert und diese Variablen/Arrays zusammenführen und ausgeben.
 
Hi,

hier ein simples Beispiel:
(ungetestet)

PHP:
$sql=<<<SQL
  select *
  from mhdl_liga
  where liga = 'c1' and saison = %s
  order by runde asc
SQL;

$query=sprintf($sql,SAISON);
$rs=mysqli_query($db_link,$query);

//Array mit allen Runden => Spiele definieren
$runden=array();
while($zeile=mysqli_fetch_array($rs,MYSQL_ASSOC)){
    $items[$zeile['runde']][]=$zeile;
}


foreach($items as $key=> $value){
    // prüfe ob Team Spielfrei
    if($value['teamheim']!='Spielfrei'){
        // asdf
        $output[$value['runde']]['sp']='HIERRESTLICHE';
    }else{
        // Schreibe Team Spielfrei in Var
        $output[$value['runde']]['sf']='HIERSPIELFREITEAM';
    }
}


foreach($output as $value){
    echo $value['sp'];
    echo $value['sf'];
}

Viele Grüße

PS: Der Code dient nur zur veranschauligung und muss noch angepasst werden.
 
So hab den code erstmal umgebaut zum teil

PHP:
$sql = "
   select *
   from mhdl_liga
   where liga = 'c1' and saison = ".SAISON."
   order by runde asc";

$rs = mysqli_query($db_link, $sql);

//Array mit allen Runden => Spiele definieren
$runden = array();
while ($zeile = mysqli_fetch_array( $rs, MYSQLI_ASSOC)){
    $runden[$zeile['runde']][] = $zeile;
}
//Und dann den Rundenarray ausgeben
foreach($runden as $runde => $spiel){
   

    foreach($spiel as $spiele){
     if($spiele['teamheim']=='Spielfrei' or $spiele['teamaus']=='Spielfrei'){
        // asdf
        $output[$spiele['runde']]['sf']='Spielfrei';
    }else{
        // Schreibe Team Spielfrei in Var
        $output[$spiele['runde']]['sp']='Spiele';
    }
    }
   
}
foreach($output as $value){
    echo $value['sp'];?><br><?
    echo $value['sf'];?><br><?
}

Das gibt mir ja jetzt den wert Spiele aus und den wert Spielfrei..... aber nicht wer Spielt oder wer Spielfrei hat ... heist ich brauchte ja wieder Arrys um als erstes die Partien anzuzeigen und unter der Tabelle dann das Team was Spielfrei hat ..
 
Zurück