Tulin juuri kesämökiltä, jossa ei, ylläri pylläri, ollut internetyhteyttä. Joten siellä EasyPHP:n ja ladattavan PHP -oppaan kanssa virittelin koodeja, ja tulin kehittäneeksi eräänlaisen toplistan sivujen hittimääristä.
Tiedostot:
index.php:
<?php if($_GET["topic"] != ""){ $fn = "haccess-count.txt"; $cf = file($fn); $fc = array(); $fk = fopen($fn, "w+"); for($i=0;$i<count($cf);$i++){ $rd = explode("|", $cf[$i]); $nnum = $rd[0] + 1; $con = $nnum."|".$_GET["topic"]."|".$rd[2]."|\r\n"; if($rd[1] == $_GET["topic"]){ fwrite($fk, $con); } else { fwrite($fk, $cf[$i]); } } fclose($fk); } echo "Top-10:<br><br>"; $fn2 = "haccess-count.txt"; $cf2 = file($fn2); array_multisort(($cf2), SORT_DESC, SORT_STRING, $cf2); for($a=0;$a<10;$a++){ $rd = explode("|", $cf2[$a]); echo "<a href=\"?topic=".$rd[1]."\">".$rd[2]."</a>, ".$rd[0]." osumaa.<br>\r\n"; } if($_GET["topic"] == "juttu"){ ?> Juttua, pöö. <?php } if($_GET["topic"] == "asia"){ ?> Asiaa, paa. <?php } if($_GET["topic"] == "homma"){ ?> Hommaa, jee. <?php } ?>
haccess-count.txt:
16|juttu|Juttua| 3|asia|Asiaa| 1|homma|Hommaa|
Vitsi on siinä, että nyt se tulostaa seuraavaa:
Hommaa, 1 osumaa. Juttua, 16 osumaa. Asiaa, 3 osumaa.
kun "Juttua" pitäisi olla ensimmäisenä. Tiedän, että tämän voisi korjata helposti pistämällä nollia eteen, mutta tällöin tuloste olisi jotain ihme sekoilua
Juttua, 00016 osumaa. Hommaa, 00001 osumaa Asiaa, 00003 osumaa.
...mitä sen ei välttämättä tarvitsisi olla. Sitä paitsi, PHP tuppaa unohtamaan edessä olevat nollat, jolloin
echo "00002" + 1;
tulostaa "3", vaikka sen pitäisi tulostaa "00003".
Toplista on nyt hieman kummallinen, voisiko kukaan auttaa? Kiitos etukäteen! :)
Muuta järjestelyssä SORT_STRING muotoon SORT_NUMERIC.
Merkkijonojen vertailussa "16" on pienempi kuin "3".
Kiitos! ^.^
Aihe on jo aika vanha, joten et voi enää vastata siihen.