zwei gleiche Namen beim Highscoreeintrag erlauben

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • zwei gleiche Namen beim Highscoreeintrag erlauben

    Hallo Leute,

    ich komme einfach nicht weiter.
    Was muss ich am folgenden php-script abändern damit auch zwei gleiche Namen und Beträge in meine data.txt (=highscoretabelle) reingeschrieben werden können:

    <?
    //$winnername="Mario"; //kommt von Flash zurück
    //$winnercredits=120; //kommt von Flash zurück

    $fp = fopen("data.txt","r");
    while($data = fgets($fp,1024)){ // zeile für zeile einlesen
    $data = explode(";",$data); // jede zeile aufsplitten
    $hitlist[$data[0]] = trim($data[1]); // ein array erzeugen mit allen spielern
    }
    fclose($fp);

    // falls ein alter Eintrag existiert, den höheren im Array speichern, sonst einen neuen erstellen
    if (min($hitlist)<$winnercredits // wenn der neue größer ist als der bisherige kleinste
    || count($hitlist)<10) // oder noch keine 10 Einträge da sind
    {
    $hitlist[$winnername] = max ($hitlist[$winnername], $winnercredits);

    // absteigend sortieren
    arsort($hitlist);

    // maximal zehn Elemente des Arrays speichern:
    $fp=fopen("data.txt","w");
    for (reset($hitlist), $i=0; (list($key, $val) = each($hitlist)) && ($i<10); $i++)
    fputs($fp,$key.";".$val."\n");
    fclose ($fp);
    }
    ?>

    data.txt:
    Mario;120
    Hoschi;200
    Martin;614
    Rene;345
    Jan;683
    Frank;405
    Superwinner;1239

    [Editiert von Metallica am 05-09-2001 um 09:01]
    $PHP resource 4ever$

  • #2
    Hi Metallica. Mit einer einfachen Änderung ist es da nicht getan. Hier muß du assoziative Arrays benutzen:

    Code:
    <? 
    //$winnername="Mario"; //kommt von Flash zurück 
    //$winnercredits=120; //kommt von Flash zurück 
    $min = -1;
    $fp = fopen("data.txt","r");
    // zeile für zeile einlesen
    while($data = fgets($fp,1024)){
      // jede zeile aufsplitten
      $data = explode(";",$data);
      // ein array erzeugen mit allen eintraegen
      $hitlist[] = array (score=>$data[0], plr=>trim($data[1]));
      // und den kleinsten Wert merken
      if ($min<0 || $min>$data[0])
        $min = $data[0];
    } 
    fclose($fp); 
    
    $anzahl = count($hitlist);
    if (
      // wenn noch keine 10 Einträge da sind
      $anzahl<10 ||
      // oder der neue Score größer ist als der bisherige kleinste
      $min<$winnercredits)
    { // eintragen
      $hitlist[] = array (score=>$winnercredits, plr=>$winnername);
    
    // Array nach Punktzahl absteigend sortieren
    // (s. dazu auch [url="http://www.php-resource.de/forum/showthread.php?threadid=2208"]Thread 2208: Sortieren von Mehrdimensionalem Array[/url])
    function vergleich ($a, $b)
    {
      return $b[score]-$a[score];
    }
    usort ($hitlist, 'vergleich');
    
    // maximal zehn Elemente des Arrays speichern: 
    $fp=fopen("data.txt","w"); 
    for ($i=0; $i<10 && $i<count($hitlist); $i++) 
      fputs($fp,$hitlist[$i][plr].";".$hitlist[$i][score]."\n"); 
    fclose ($fp); 
    } 
    ?>
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Hi Titus,

      hab das grad mal gecheckt.
      Nach ausführen des codes sieht meine data.txt jetzt so aus:

      Mario;120
      200;Hoschi
      614;Martin
      100;Erich
      683;Jan
      405;Frank
      1239;Superwinner
      120;Mario
      345;Rene

      Zwei gleiche Einträge nimmt er. Aber die anderen dreht er um!?!?!?

      Übrigens, absoluter Überwahnsinn, dass du da noch durchblickst. Ich check keine 40% mehr.
      $PHP resource 4ever$

      Kommentar


      • #4
        Titus??
        $PHP resource 4ever$

        Kommentar


        • #5

          Titus???
          Hast Du eh nich auf mich vergessen??
          $PHP resource 4ever$

          Kommentar


          • #6
            sorry, war ein paar Tage abwesend.
            Ich schnall gerade nicht, was er warum umdreht.

            Zeig doch mal das Ergebnis, bevor und nachdem du einen neuen Highscore eingetragen hast.
            Und sag mir dann noch, was dich daran stört.
            mein Sport: mein Frühstück: meine Arbeit:

            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

            Kommentar


            • #7
              Hi Titus,

              es geht um zwei namens- u. punktegleiche Einträge in meine Highscoretabelle. Dafür benutze ich eine txt die folgendermaßen aussieht:

              data.txt:
              Mario;120
              Hoschi;200
              Martin;614
              Rene;345
              Jan;683
              Frank;405
              Superwinner;1239

              Jetzt trägt sich angenommen ein User ein der auch Mario heißt und 120 Punkte hat. Also sollte die data.txt dann so aussehen:

              Mario;120
              Mario;120
              Hoschi;200
              Martin;614
              Rene;345
              Jan;683
              Frank;405
              Superwinner;1239

              Nach Testen deines Codes sieht meine data.txt jetzt nicht wie oben aus, sondern so:

              Mario;120
              120;Mario
              200;Hoschi
              614;Martin
              345;Rene
              683;Jan
              405;Frank
              1239;Superwinner

              D.h. php vertauscht an irgendeiner Stelle im Code die Datensätze (außer die 1.Zeile; die ist OK). Hab da schon einiges umzuändern versucht - allerdings erfolglos.

              So, ich hoffe die Ausführung war verständlich genug.

              CU
              $PHP resource 4ever$

              Kommentar


              • #8
                Ups ... kleiner Denkfehler in der ersten Schleife. Hättest du aber auch drauf kommen können, sind nur ein paar Nullen und Einsen auszuwecheln.

                So stimmt's:
                Code:
                // zeile für zeile einlesen
                while($data = fgets($fp,1024)){
                  // jede zeile aufsplitten
                  $data = explode(";",$data);
                  // ein array erzeugen mit allen eintraegen
                  $hitlist[] = array (plr=>trim($data[[b]0[/b]]), score=>$data[[[b]1[/b]]);
                  // und den kleinsten Wert merken
                  if ($min<0 || $min>$data[[[b]1[/b]])
                    $min = $data[[[b]1[/b]];
                }
                mein Sport: mein Frühstück: meine Arbeit:

                Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                Kommentar


                • #9
                  Die Nullen und Einser hab ich selbst auch schon ausgetauscht an dieser Stelle - hat aber nicht gefuntzt.

                  Hab jetzt die Änderungen durchgeführt. Nun sieht die Data.txt so aus:

                  Mario;120
                  200;Hoschi
                  614;Martin
                  100;Erich
                  683;Jan
                  405;Frank
                  1239;Superwinner
                  120;Mario
                  345;Rene

                  Irgendwo verdreht php noch den neuen Eintrag, sonst paßt's aber. Leider finde ich keine Nullen und Einser mehr, die ich umdrehen könnte!?!??!
                  $PHP resource 4ever$

                  Kommentar


                  • #10
                    Titus?
                    Hast Du eh nicht auf mich vergessen?
                    $PHP resource 4ever$

                    Kommentar


                    • #11
                      kann.
                      nicht.
                      sein.

                      Kann echt nicht sein!

                      Die Datei sieht aus, als wäre gar keine Sortierung geschehen, d.h. du machst mit der $hitlist noch irgendwas, das in meinem Skript nicht vorkommt; oder die data.txt wird nicht geschrieben.

                      Ooooder ... du hast sie nicht wieder durch die korrekte "alte" Version ersetzt.

                      Am besten erstellst du dir nochmal eine "richtige" data.txt und schreibst im Skript in dataneu.txt. Die dataneu.txt schaust du dir dann an, und dann wollen wir mal sehen, ob wir den Fehlerkobold nicht noch aufspüren können!
                      mein Sport: mein Frühstück: meine Arbeit:

                      Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                      Kommentar

                      Lädt...
                      X