Lid |
|
Ik ben al twee dagen aan het vogelen, maar kom er niet uit.
Het zal wel iets doms zijn, maar misschien kan iemand me op weg helpen. Ik heb een pagina waar je op een foto kunt stemmen. Je kunt een score geven van 1 to 5. De resultaten worden weggeschreven in een tekstfile. Ik schrijf de volgende gegevens weg met als seperator %% : idnr %% score %% aantal keer gestemd %% datum eerste stem.
Het tekstbestand komt er dus bijvoorbeeld alsvolgt uit te zien :
1%%12%%3%%6-12-2004
2%%5%%1%%6-12-2004
3%%18%%4%%6-12-2004
Nu wil ik hier een ranking van maken. Ik schrijf in een nieuw tekstbestand dezelfde string weg als hierboven. Alleen reken ik eerst nog het gemiddelde uit, en zet dat voor de string.
Nu wil ik deze sorteren van hoogste naar laagste score.
Hieronder heb ik het stukje code gezet. Het werkt prima, tot ik moet sorteren. Dit komt volgens mij omdat ik een string uitlees uit het tekstbestand. En dat zou een array moeten zijn?? De rest van de code kan vast optimaler gemaakt worden, maar daar gaat het me niet om. Graag een beetje hulp bij het sorteren.
Alvast bedankt.
<?
$score = "./wedstrijd/score.txt";
$sorteren = "./wedstrijd/sorteren.txt";
// Het bestand met de scores uitlezen
$open = fopen($score, "r");
$size = filesize($score);
$temp = fread($open, $size);
fclose($open);
$lines = file($score); // aantal regels van bestand bepalen
$inhoud = explode("\n", $temp);
$open4 = fopen($sorteren, "w");
foreach ($lines as $line_num => $line) {
list($leesid,$leesscore,$leesaantal,$leesdatum)=explode("%%",$inhoud[$line_num]);
// gemiddelde uitrekenen
if ($leesaantal > 0) {
$gemiddelde = $leesscore / $leesaantal;
$afgerond = round($gemiddelde, 1);
}
else {
$afgerond = 0;
}
// string regel anders sorteren
$inhoud[$line_num] = $afgerond . "%%" . $leesid . "%%" . $leesscore . "%%" . $leesaantal . "%%" . $leesdatum;
fwrite($open4, $inhoud[$line_num]); //nieuwe regel wegschrijven
fwrite($open4, "\n");
}
fclose($open4);
// bestand met nieuwe string uitlezen
$open5 = fopen($sorteren, "r");
$size = filesize($sorteren);
$temp = fread($open5, $size);
fclose($open5);
sort($temp);
// gesorteerde string weer wegschrijven
$open6 = fopen($sorteren, "w");
fwrite($open6, $temp);
fclose($open6);
?>
<? $score = "./wedstrijd/score.txt"; $sorteren = "./wedstrijd/sorteren.txt"; // Het bestand met de scores uitlezen $open = fopen($score, "r"); $temp = fread($open, $size); $lines = file($score); // aantal regels van bestand bepalen $open4 = fopen($sorteren, "w"); foreach ($lines as $line_num => $line) { list($leesid,$leesscore,$leesaantal,$leesdatum)=explode("%%",$inhoud[$line_num]); // gemiddelde uitrekenen if ($leesaantal > 0) { $gemiddelde = $leesscore / $leesaantal; $afgerond = round($gemiddelde, 1); } else { $afgerond = 0; } // string regel anders sorteren $inhoud[$line_num] = $afgerond . "%%" . $leesid . "%%" . $leesscore . "%%" . $leesaantal . "%%" . $leesdatum; fwrite($open4, $inhoud[$line_num]); //nieuwe regel wegschrijven } // bestand met nieuwe string uitlezen $open5 = fopen($sorteren, "r"); $temp = fread($open5, $size); // gesorteerde string weer wegschrijven $open6 = fopen($sorteren, "w"); ?>
Admin edit:
code-tags rond de code gezet
|