12 berichten aan het bekijken - 1 tot 12 (van in totaal 12)
  • Q:

    Bijdrager
    WebJ

    [PHP] – Beperken tot 10 resultaten…

    Hey allemaal,

    Ik ben al een hele tijd bezig een probleem op te lossen maar ik kom er zelf niet uit :oops: . Ik heb een aantal Flashspellen op mijn nieuwe website (nog niet online), maar ik wil natuurlijk dat de 10 beste weergeven worden, nu heb ik hier een scriptje en ik heb al alles geprobeerd maar het lukt me niet om uit een lijst met allerlei scores de 10 met de hoogste score te krijgen.
    Als de resultaten worden verzonden komen ze in een tekst bestand als volgt:
    Score|Naam
    bijvoorbeeld
    10|Jaap
    30|Jaap
    25|Marie

    Nu wil ik dat het beperkt wordt tot de 10 beste en dat deze weeregeven worden (liefst met nummers 1 t/m 10). Ik heb nu het volgende script maar hoe bouw ik dat er nu in. Waarschijnlijk zal de oplossing heel simpel zijn (zoals bij al mijn problemen :evil: ), maar ik kom er niet uit en loop er al een redelijk lange tijd mee.

    Elke verzonden score krijgt een aparte lijn, aan het einde van het toevoegen van de score en naam wordt er een soort <br> toegevoegt zodat het volgende resultaat dat toegevoegt wordt niet op dezelfde regel komt.
    Dit is het script:
    [code:1:1ce23acc27]
    function MaakLijst($waarden, $nummer)
    {
    list($naam,$score) = explode("|",$waarden);
    echo("Score: <strong>$naam</strong><br /> Naam: <strong>$score</strong><br /><br />");
    }
    $DeTop10 = file(’top10.txt’);
    natsort($DeTop10);

    if (count($DeTop10) == 0)
    {
    echo("Geen gegevens beschikbaar");
    }
    else
    {
    array_walk(array_reverse($DeTop10), ‘MaakLijst’);
    }
    [/code:1:1ce23acc27]
    (deels zelfs geschreven en een deel gekopieerd:roll: !)

    Voor de duidelijkheid: Als er twintig toeboegingen zijn nu bijvoorbeeld worden ze alle twintig op score gesorteerd. Of is het beter bij het toevoegen te controleren zodat het bij de 10 beste resultaten blijft. In dat geval zal ik ook daarvan de code geven.


    Bijdrager
    meneer de koekepeer

    Heb je mysql tot je beschikking?


    Bijdrager
    WebJ

    Ja :wink: , maar ik heb de kennis niet om met Flash via php een MySQL database aan te sturen. Ik kom nu nog maar tot simpele PHP scripts :oops: , maar als je me erbij kan helpen…


    Bijdrager
    tennapel

    Eerst de array sorteren op rangorde en dan in een loop de resultaten wegschrijven naar een nieuwe array en de de loop tot tot 10 resultaten maximaliseren:
    [code:1:edd918062b]do {
    ….
    $count++} while ($count < 10);[/code:1:edd918062b]


    Bijdrager
    WebJ

    Zou je me ook in hoofdlijnen kunnen vertellen hoe ik die artay snel kan maken, want nu komt als ik het wil maken alles in 1 array doordat die functie ‘m in een keer maakt…


    Bijdrager
    tennapel

    sorting arrays:

    http://www.htmlite.com/php025.php

    creating arrays:

    http://www.htmlite.com/php020.php

    stap 1: sorteer array
    stap 2: maak een loop die de waarde uit het gesorteerde array in een nieuw array inleest en laat de loop 10x lopen.
    stap 3: gebruik nieuwe array of gebruik al stap 2 om het gesorteerde array uit lezen in de pagina/html/variable of wat je ook binnen Flash zou kunnen gebruiken.

    Als je een ongesorteerd array kan uitlezen, dan kan je ook een gesorteerd array uitlezen en als je dat binnen de loop kan doen, dan is stap 3 overbodig.

    Een beetje prutsen met PHP zal je denk ik wel met het goede resultaat doen belanden en zo niet, dan zijn er heel erg veel PHP forums waar je je vraag zou kunnen stellen.


    Bijdrager
    macetaria

    Laat iets weten of het je lukt of niet. Anders wil ik je wel even verder helpen. (misschien ook even posten wat je al hebt)


    Bijdrager
    WebJ

    Het is me inmiddels gelukt:
    Voor de php-geïnteresseerden:
    [code:1:689d24733e]$bestand = file("top10.txt");

    natsort($bestand);

    $bestand = array_reverse($bestand);

    for($i=0; $i < count($bestand); $i++)
    {
    if ($i == 10)
    {
    exit();
    }
    $gesplitst = explode("|",$bestand[$i]);
    echo "Score: ".$gesplitst[0]." Naam: ".$gesplitst[1]."<br /><br />";
    }[/code:1:689d24733e]


    Bijdrager
    Elger

    Met een simpele tabel in database is het _veel_ makkelijker:)

    top10:
    select * from charts order by rank desc limit 0, 10

    omgekeerd:
    select * from charts order by rank asc limit 0, 10

    vanaf positie 10:
    select * from charts order by rank asc limit 10, 10

    en natsort over een bestand? kan best, maar is het niet verstandig om je bestand dan in csv op te slaan, bij het inlezen te knippen en dan die array te sorteren? csv is tenminste te importeren met excel.

    je kan het ook zo doen, zonder exit:
    [code:1:35a920053e]for($i=0;($i < count($bestand)) && ($i < 10); $i++) [/code:1:35a920053e]


    Bijdrager
    WebJ

    Weet ik Elger, maar voorlopig blijf ik nog even bij PHP totdat ik er meer van weet.

    en natsort over een bestand? kan best, maar is het niet verstandig om je bestand dan in csv op te slaan, bij het inlezen te knippen en dan die array te sorteren? csv is tenminste te importeren met excel.

    Wat bedoel je hiermee? Wat is een csv?


    Bijdrager
    macetaria

    CSV is een soort van algemene manier om data op te slaan in een textfile.
    De meeste programma’s die met databases oid werken kunnen hun data op die manier exporteren/ of zulke file openen.

    CSV wil zeggen: Comma Separated Value. Alle velden worden dus door een komma+aanhalingstekens gescheiden.

    Weet ik Elger, maar voorlopig blijf ik nog even bij PHP totdat ik er meer van weet.

    Verder had ik ook een tijdje zo van “ik zal eerst PHP leren, en dan eens naar mySQL kijken”.
    Maar eigenlijk kijk je beter toch eens naar mySQL. Na verloop van tijd maakte ik met PHP enorm complexe dingen die met mySQL piece of cake zijn.
    MySQL is echt heel eenvoudig voor geen al te complexe dingen. Jouw ‘probleem’ kan je bij de mySQL categorie “h├ę├ęl eenvoudig” steken, zelfs voor een leek.


    Bijdrager
    Elger

    Ja opzich wel goed om bij php alleen te blijven, dan zou je bijvoorbeeld ming of gd kunnen proberen. Het bewerken van data, vooral van dezelfde soort, is het makkelijkst met een database. Dus ik raad je aan om mysql te installeren (zie site van marc liyanage, of itools7.3).

    Wat natuurlijk wel zo is: als het eenmaal werkt, dan werkt het; dat geld ook voor deze top 10 natuurlijk.

12 berichten aan het bekijken - 1 tot 12 (van in totaal 12)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.