Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Järjestely luvun mukaan

Short Php [17.03.2007 08:53:15]

#

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.

Extreme [17.03.2007 09:08:42]

#

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.php?tunnus=phpj6

-Hannu

Short Php [17.03.2007 09:54:58]

#

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.

Antti Laaksonen [18.03.2007 00:58:26]

#

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ä.

function oma ($a, $b) {
    $a = explode("|", $a);
    $b = explode("|", $b);
    return (int)$b[1] - (int)$a[1];
}
uasort($jasenfile, "oma");
reset($jasenfile);
// jne.

Sami [18.03.2007 02:45:38]

#

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.

Short Php [19.03.2007 17:48:26]

#

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>";
}
}
?>

Antti Laaksonen [19.03.2007 17:57:23]

#

Käytä funktion uasort sijasta funktiota usort, niin pitäisi toimia.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta