Oletetaan että tiedoston "sort.txt" sisältö on tämännäköinen:
Pekka|47|p@mail.com Matti|25|m@mail.com Kalle|82|k@mail.com
Miten saisin haettua nuo tiedot, sortattua noi numerot keskenään, ja tulostamaan tyyliin "Nimi: $nimi; Pistemäärä: $pm; E-mail: $email;"?
Isoin luku päällimmäisenä ja pienin alimmaisena.
Tätä koodia sinun on helppo muokata itselle sopivaksi.
<?php //luetaan viestit taulukkoon $viestit = file("viestit.txt"); //käännetään taulukko, jolloin uusimmat viestit tulevat ylimmiksi $viestit = array_reverse($viestit); //viestien määrä on suoraan taulukon rivien määrä $viestimaara = count($viestit); //tulostetaan viestimäärä echo "<p>Yhteensä <b>$viestimaara</b> viestiä.</p><hr>"; //käydään jokainen viesti läpi for ($i = 0; $i < $viestimaara; $i++) { //$viestit[$i] on merkkijono, joka sisältää viestin $i tiedot //pystyviivoilla erotettuna; jaetaan viestit $tiedot-taulukkoon $tiedot = explode("|", $viestit[$i], 4); //erotellaan tiedot omiin muuttujiinsa $nimi = $tiedot[0]; $email = $tiedot[1]; $aika = $tiedot[2]; $viesti = $tiedot[3]; //tulostetaan viesti echo "<p><b>Lähettäjä</b>: <a href=\"mailto:$email\">$nimi</a><br>"; echo "<b>Aika</b>: " . date("d.m.Y H:i", $aika) . "<br>"; echo "<br>$viesti<hr>"; } ?>
Suoraan copy-paste oppaasta: https://www.ohjelmointiputka.net/oppaat/opas.
-Hannu
Uoh. Jotenkin tarvitsen vieläkin apua. Tai käytän tällaista systeemiä:
<?php arsort($jasenfile); reset($jasenfile); while (list($key, $val) = each($jasenfile)) { $pommi = explode("|", $jasenfile[$key]); // echo "fruits[" . $key . "] = " . $val . "\n"; echo "Nimi: $pommi[0] - Pistemäärä: $pommi[1] <br>"; } ?>
Muuten toimii mutta tämä sorttaa nimen perusteella, ei sen luvun.
PHP ei pysty arvaamaan, millä perusteella tiedot kuuluu järjestellä, mutta oman vertailufunktion avulla tämä onnistuu. Seuraavan esimerkin pitäisi toimia suoraan omaan koodiisi yhdistettynä.
Lue tiedot taulukoksi ja array_multisort auttaa. https://www.php.net/manual/en/function.array-multisort.php
Tosin jos tiedot eivät muutu kovin usein, niin lienee järkevämpää järjestää taulukko kerran ja kirjoittaa se valmiiksi järjestettynä tiedostoon, jonka jälkeen pelkkä tiedoston lukeminen riittää eikä järjestämistä tarvitse suorittaa aina uudestaan.
Kokeilin allanäkyvää järjestelmää, mutta sen ei pitäisi olla näin -eihän?- joten miten saisin tämän toimimaan?
?php $jasenfile = file("jasenet.txt"); function oma ($a, $b) { $a = explode("|", $a); $b = explode("|", $b); return (int)$b[1] - (int)$a[1]; } uasort($jasenfile, "oma"); reset($jasenfile); for ($i = 0; $i < "5"; $i++) { $dynamite = explode("|", $jasenfile[$i]); if ($dynamite[0] === '') { echo ""; } else { echo "Nimi: $dynamite[0] - Pistemäärä: $dynamite[1] <br>"; } } ?>
Käytä funktion uasort sijasta funktiota usort, niin pitäisi toimia.
Aihe on jo aika vanha, joten et voi enää vastata siihen.