SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Handbuch der Java-Programmierung

Handbuch der Java-Programmierung zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten
Hilfe Community Kalender Heutige Beiträge Suchen

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 31.05.2004, 15:30:42
Ligamanager Ligamanager ist offline
Anfänger
 
Registriert seit: May 2004
Beiträge: 1
Fußballtabellen - Problem mit Sortierung

Ich bin dabei, einen Ligamanager zu programmieren.

Ich habe nur ein kleines Problem bei der Sortierung der Fußballtabellen. Will man die Bundesligatabelle sortieren, ist das ja kein Thema, da kann man mit array_multisort ohne Probleme arbeiten. Schwierig wird es, wenn man die Tabellen aus Italien, Spanien oder EM/WM sortieren will. Denn da gilt bei Punktgleichheit der direkte Vergleich und nicht die Tordifferenz. Direkter Vergleich bedeutet, dass bei allen Punktgleichen eine Art "Minitabelle" errechnet wird, bei der nur die Spiele untereinander berücksichtigt werden.

Jetzt müsste man also mit u(a)sort und einer Vergleichsfunktion arbeiten - und genau da hakt's bei mir leider. Ich weiß zwar, dass der Stringvergleich <0, 0 und >0 ergibt, aber wie muss ich das nun anstellen, dass ich (abhängig von der Einstellung, ob direkter Vergleich gilt oder nicht - das wird aus der Config ausgelesen) nun nach einander nach verschiedenen Kritieren sortieren kann?


Mal ein Beispiel bei der EM:

Tschechien - Lettland 2:0
Deutschland - Niederlande 1:0
Lettland - Deutschland 0:1
Niederlande - Tschechien 4:0
Niederlande - Lettland 2:0
Deutschland - Tschechien 1:2

würde folgende Tabelle OHNE direkten Vergleich ergeben:

1. Niederlande 6 Pkt (6:1 Tore)
2. Deutschland 6 Pkt (3:2 Tore)
3. Tschechien 6 Pkt (4:5 Tore)
4. Lettland 0 Pkt (0:5 Tore)

d.h., dass jetzt die Spiele zwischen Niederlande, Deutschland und Tschechien für den direkten Vergleich berücksichtigt werden, also ohne die Spiele gegen Lettland:

1. NED 3 (4:1)
2. GER 3 (2:2)
3. CZE 3 (2:5)

in dem Beispiel würde sich also auch im Endeffekt nichts verschieben, könnte aber gut passieren, z.B. wenn nur Deutschland und die Niederlande Punktgleich wären am Ende und Deutschland eben das Spiel gewonnen hat. Dann wäre Deutschland vorne.
Ich denke, das Prinzip is klar geworden (is eh nur zur Erklärung, damit auch Leute helfen können, die sich mit Fußball nicht auskennen ;)).


Ach ja, ein Wort vielleicht noch zu den Arrays. Ich würde gerne die Ergebnisse auslesen und dann jeweils die Team-ID als Schlüssel nehmen, d.h. z.B.:

$punkte[1] = 6;
$punkte[2] = 5;
...
$differenz[1] = 3;
$differenz[2] = -1;
usw.

und eben entsprechend sortieren.


Vielen Dank schonmal für die Hilfe!
Mit Zitat antworten
  #2  
Alt 21.06.2004, 11:00:25
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
Ich hoffe, das kommt jetzt nicht zu spät. Dein Eintrag ist ja schon etwas länger her.

Ich würde es so ähnlich machen:

Die Spiele sind in einer DB "spiele" mit folgender Struktur:
ID
HID //ID DER HEIMMANNSCHAFT
AID //ID DER AUSWÄRTSMANNSCHAFT
toreH //TORE DER HEIMMANNSCHAFT
toreA //TORE DER AUSWÄRTSMANNSCHAFT

Dann liest du die Ergebnisse so aus, dass du ein Array mit folgender Struktur hast (als Beispiel für das Team mit der ID=5):

PHP-Code:
$tabelle['5']['punkte']=34;
$tabelle['5']['tore']=45;
$tabelle['5']['gegentore']=35;
$tabelle['5']['differenz']=10;

//ID IN ARRAY ABLEGEN, DER KEY IST DIE ANZAHL DER PUNKTE
foreach($tabelle as $ID => $row){
    
$punkte[$row['punkte']][]=$ID;
    }

//NACH PUNKTEN ABSTEIGEND SORTIEREN
krsort($punkte);

//JETZT DIE TABELLE ANZEIGEN
foreach($punkte as $pkt => $row){
    
//WENN ES NUR EINEN VEREIN MIT DIESER PUNKTZAHL GIBT, SOFORT AUSGEBEN
    
if(count($row)==1){
        
//HIER DANN VEREINSNAMEN, PUNKTE, TORDIFFERENZ ETC. WIE GEWÜNSCHT ANZEIGEN
        
}
    
//WENN ABER MEHR ALS EIN VEREIN DIE GLEICH PUNKTZAHL HABEN, DIE FUNKTION TABELLE AUFRUFEN
    
elseif(count($row)>1){
        
$tmp=tabelle($row);
        foreach(
$tmp as $pkt_tmp => $row_tmp){
            
//HIER DANN VEREINSNAMEN, PUNKTE, TORDIFFERENZ ETC. WIE GEWÜNSCHT ANZEIGEN
            
}
        }
    } 
Das entscheidende ist die Funktion tabelle(). Der erste Parameter ist ein Array, in dem die ID der Vereine abgelegt sind, die die gleich Punktzahl haben.

PHP-Code:
function tabelle($ID_array){
    
//ALLE BEGEGNUNGEN AUS DER DATENBANK AUSLESEN, DIE ZWISCHEN DEN MANNSCHAFTEN STATTGEFUNDEN HABEN, DIE IN DEM ARRAY $ID_array GESPEICHERT SIND
    
$query="SELECT HID, AID, toreH, toreA FROM spiele WHERE (HID='" implode("' OR HID='"$ID_array) . "') AND (AID='" implode("' OR AID='"$ID_array) . "') ORDER BY ID";
    
$result=mysql_query($query);
    
//JETZT EIN ARRAY $tmp ERSTELLEN, DAS DIE GLEICH STRUKTUR HAT WIE DAS OBEN ERWÄHNTE ARRAY $tabelle, NUR DAS HIER EBEN NUR DIE ENTSPRECHENDEN SPIELE GESPEICHERT SIND

    //JETZT DIESES ARRAY SORTIEREN
    
foreach($tabelle as $ID => $row){
        
$punkte[$ID]=$row['punkte'];
        
$tore[$ID]=$row['tore'];
        
$differenz[$ID]=$row['differenz'];
        }

    
//JETZT DAS ARRAY tmp SORTIEREN...
    
array_multisort($punkteSORT_DESC$differenzSORT_DESC$toreSORT_DESC$tmp);

    
//...UND ZURÜCKGEBEN
    
return $tmp;
    } 
Das ganze ist nicht getestet und auch nur aus dem Kopf heraus geschrieben. Fehler sind also nicht ausgeschlossen. Aber ich hoffe, dass wenigstens das Prinzip klar wird. Den Rest dürftest du dann alleine hinbekommen.

Geändert von xabbuh (22.06.2004 um 10:23:25 Uhr)
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:22:04 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt