Archief - PHP: 2D array ordenen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

HelloApu

Legacy Member
Hey,

Ik heb een scriptje gemaakt waarbij ik alle teams in een array zet met hun gewonnen matches, verloren matches, draws, gewonnen rondjes en verloren rondjes. Nu wil ik een ranking maken dat degene me de meeste wins bovenaan staan, dan met de meeste draws, dan met de minste losses, en dan meeste rondjes gewonnen, minste rondjes verloren.

Als ik enkel sorteer op minste losses dan werkt het,
url: http://84.243.250.20/~digibattle/poules.php

maar als ik sorteer op minste rondjes verloren dan weer niet?
url: http://84.243.250.20/~digibattle/poules2.php

En hoe kan ik het beste na elkaar sorteren in de bovenvernoemde volgorde?

Alvast bedankt!

PHP:
<?PHP
	$CupID = 7;
	include("config.php");
	include("functions/functionlist.php");


if(!isset($_GET["Poule"]))
{
 	$Poule = 1;
}
else
{
	$Poule = $_GET["Poule"];
}
$PouleQuery = mysql_query("SELECT * FROM Cups_Poules WHERE PouleNummer = '$Poule' AND PouleCup = '$CupID'") or die(mysql_error());
$i=0;
while($PouleRes = mysql_fetch_array($PouleQuery))
{
	$Team[$i]["Name"] = $PouleRes["PouleTeam"];
	$Wins = mysql_fetch_array(mysql_query("SELECT COUNT(*) AS Wins FROM Matches WHERE ((MatchTeam1 = '".$Team[$i]["Name"]."' AND MatchScore1 > MatchScore2 ) OR (MatchTeam2 = '".$Team[$i]["Name"]."' AND MatchScore1 < MatchScore2 ))  AND MatchCup = '$CupID'"));
	$Losses = mysql_fetch_array(mysql_query("SELECT COUNT(*) AS Losses  FROM Matches WHERE  ((MatchTeam1 = '".$Team[$i]["Name"]."' AND MatchScore1 < MatchScore2 ) OR (MatchTeam2 = '".$Team[$i]["Name"]."' AND MatchScore1 > MatchScore2 ))  AND MatchCup = '$CupID'"));
	$Draws = mysql_fetch_array(mysql_query("SELECT COUNT(*) AS Draws FROM Matches WHERE  ((MatchTeam1 = '".$Team[$i]["Name"]."' AND MatchScore1 = MatchScore2 ) OR (MatchTeam2 = '".$Team[$i]["Name"]."' AND MatchScore1 = MatchScore2 )) AND MatchCup = '$CupID' AND MatchScore1 != '0'"));
	$RoundsWon1 = mysql_fetch_array(mysql_query("SELECT SUM(MatchScore1) AS RoundsWon1 FROM Matches WHERE MatchTeam1 = '".$Team[$i]["Name"]."'  AND MatchCup = '$CupID'"));
	$RoundsWon2 = mysql_fetch_array(mysql_query("SELECT SUM(MatchScore2) AS RoundsWon2 FROM Matches WHERE MatchTeam2 = '".$Team[$i]["Name"]."' AND MatchCup = '$CupID'"));
	$RoundsLost1 = mysql_fetch_array(mysql_query("SELECT SUM(MatchScore2) AS RoundsLost1 FROM Matches WHERE MatchTeam1 = '".$Team[$i]["Name"]."'  AND MatchCup = '$CupID'"));
	$RoundsLost2 = mysql_fetch_array(mysql_query("SELECT SUM(MatchScore1) AS RoundsLost2 FROM Matches WHERE MatchTeam2 = '".$Team[$i]["Name"]."' AND MatchCup = '$CupID'"));
	
	$Team[$i]["Wins"] = $Wins["Wins"];
	$Team[$i]["Losses"] = $Losses["Losses"];
	$Team[$i]["Draws"] = $Draws["Draws"];
	$Team[$i]["RoundsWon"] = $RoundsWon1["RoundsWon1"] + $RoundsWon2["RoundsWon2"];
	$Team[$i]["RoundsLost"] = $RoundsLost1["RoundsLost1"] + $RoundsLost2["RoundsLost2"];
	$Team[$i]["Points"] = $Team[$i]["Wins"]*3 + $Team[$i]["Draws"];
	
	$i = $i+1;
}




function cmp1($a, $b)
{
    return strcmp($a["Losses"], $b["Losses"]);
}

usort($Team, "cmp1");

for($i=0;$i<4;$i++)
{
	if(is_int($i/2)) { $Row = 1; } else { $Row = 2; }
	$Poules .= "<tr>
    <td class=\"Row$Row\">".GetClanFull($Team[$i]["Name"])."</td>
    <td class=\"Row$Row\">".$Team[$i]["Wins"]."</td>
    <td class=\"Row$Row\">".$Team[$i]["Draws"]."</td>
    <td class=\"Row$Row\">".$Team[$i]["Losses"]."</td>
    <td class=\"Row$Row\">".$Team[$i]["RoundsWon"]."/".$Team[$i]["RoundsLost"]."</td>
    <td class=\"Row$Row\">".$Team[$i]["Points"]."</td>
  </tr>
	";
}
	eval("\$Content = \"".gettemplate("cups2_poules")."\";");
	echo $Content;
?>
PHP:
function cmp1($a, $b)
{
    return strcmp($a["RoundsLost"], $b["RoundLost"]);
}

Tyfius

Legacy Member
Wegens geen tijd om er veel over na te denken kan ik geen echte grote oplossing geven.

Maar als ik het goed begrepen heb zijn er 2 tabellen: "Matches" en "Cup_Poules". Logisch zou ik beiden combineren in 1 query (desnoods 2) maar niet zoveel query's zoals je nu hebt. Een ORDER BY en een GROUP BY dus ofzo om de teams te combineren en dan ORDER BY matches.wins, matches.draws, matches.losses ASC ofzo. En dan naargelang de URL gekozen die ASC veranderen door DESC. Zou een eenvoudige oplossing moeten zijn.

HelloApu

Legacy Member
Misschien lukt mij dat wel om al die matches query in eentje te steken maar dan snap ik nog niet hoe ik bvb de gewonnen rondjes kan optellen van een team omdat dat ofwel bij Team1 ofwel bij Team2 kan staan
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan