Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Array - zweithöchster Wert bzw. nach Wertigkeit ausgeben

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Array - zweithöchster Wert bzw. nach Wertigkeit ausgeben

    Hallo,

    ich führe die Wertungstabelle einer kleinen Pokerrunde, in der jeder Spieler natürlich eine jeweils aktuelle Gesamtpunktzahl hat, und somit dann eine Platzierung in der Gesamtwerung.

    Die jeweiligen Gesamtpunkte sind in folgendem array:
    PHP-Code:
    $wertung = array($a_all$d_all$h_all$m_all$n_all$s_all$t_all); 
    $a_all - $t_all sind die ermittelten Gesamtpunkte der 7 Teilnehmer...
    Den jeweil Führenden gebe ich mit einer switchabfrage aus
    PHP-Code:
    <?php
                            
    switch($wertung){
                                case 
    $a_all == max($wertung);
                                echo 
    $player["a"];
                                break;
                                ...
    usw.            }                            
                                echo 
    " - "; echo max($wertung); echo " Pts."?>
    Wie kann ich aber den zweithöchsten Wert des arrays (dritt-vierthöchsten...) ausgeben, damit sich die Platzierungen der Gesamtpunktzahl entsprechen ändern?

    Danke für alle Anregungen
    liebe Grüsse
    Andreas


  • #2
    Das sieht sehr kompliziert aus was du da machst. Viel einfacher ist es wenn du das Array sortiert und dann einfach den ersten oder den zweiten Wert im Array verwendest.

    Kommentar


    • #3
      Am Besten schreibst du die Gesamtpunktzahl ebenfalls in das Array $player und sortierst es nach der Gesamtpunktzahl, sodass gleich alle anderen Werte mitsortiert werden. Eine simple foreach-Schleife reicht dann aus, um die Spieler in der richtigen Reihenfolge auszugeben.
      http://hallophp.de

      Kommentar


      • #4
        Danke für die Antworten
        kompliziert mag es ja sein, freue mich aber, das es soweit funktioniert bei meinem derzeitigen wissensstand...
        Zitat von Flor1an Beitrag anzeigen
        ...Array sortiert und dann einfach den ersten oder den zweiten Wert im Array verwendest.
        genau dieses erschliesst sich mir leider nicht... wie verwende ich den zweiten wert - und dann den dritten usw...? Ein Beispiel wäre toll

        Gruss
        Andreas

        Kommentar


        • #5
          Ein Beispiel wäre toll
          Wie wäre es, wenn du dir erstmal selber Gedanken machen und die geposteten Tipps ausprobieren würdest?
          http://hallophp.de

          Kommentar


          • #6
            Zitat von LucaBrasi Beitrag anzeigen
            wie verwende ich den zweiten wert - und dann den dritten usw...?
            Wenn dir der Zugriff auf Array-Elemente mit einem nummerischen Index nicht klar ist, bzw. das Durchlaufen eines Arrays in einer Schleife auch nicht - dann arbeite bitte zunächst die entsprechende Stelle in einem Grundlagen-Tutorial durch, bzw. lies es im Manual nach.

            Kommentar


            • #7
              Ich habe mir diesbezüglich schon einiges angeschaut und (auch die geposteten links), komme aber nicht dahinter, kriege auch nicht wirklich relevantes gegoogelt

              PHP-Code:
              $wertung_n = array("Andreas"=> $a_all"Daniel" => $d_all"Hüseyin" => $h_all"Martin" => $m_all"Martin NJ" => $n_all"Sebi" => $s_all,  "Tobias" => $t_all);
                                  
              arsort($wertung_n);
                                  foreach (
              $wertung_n as $key => $points) {
                                  echo 
              "$key = $points";
                                  echo 
              "<br/>"
              mit arsort bekomme ich die Liste nach Wertung angezeigt...
              aber wie kann ich mir nun nur den zweit.../dritthöchsten ausgeben lassen, ich kann's wahrscheinlich mangels Ahnung nirgendwo rauslesen
              Deswegen wäre ich für Hilfe wirlich dankbar
              Gruss
              BrettvormKopp

              Kommentar


              • #8
                Die Nummer mit dem numerischen Index vergiss mal, du brauchst ja die Schlüssel (ansonsten würde rsort() statt arsort() und $wertung_n[1] für den Zugriff reichen)

                PHP: array_multisort - Manual ist aber wirklich einen Blick wert! Du könntest dir z.B. mit array_keys() und array_values() die Schlüssel und Werte als einzelne Arrays $name und $wertung holen, mit array_multisort() dann diese beiden Arrays gemeinsam sortieren (Manual dazu lesen!) und hättest dann Name und Wertung des zweithöchsten in $name[1] und $wertung[1]
                @fschmengler - @fschmengler - @schmengler
                PHP Blog - Magento Entwicklung - CSS Ribbon Generator

                Kommentar


                • #9
                  Deswegen wäre ich für Hilfe wirlich dankbar
                  Gruss
                  BrettvormKopp
                  Wer sagt eigentlich, dass die Spielernamen innerhalb des Arrays der Schlüssel sein müssen - dreh die Angelegenheit einfach so um, dass die Punkteanzahl jeweils der Schlüssel ist, dem der Spielername zugeordnet ist - wirst Dich umschauen, wie Dein Array von ganz allein sortiert ist.

                  Hoffe, dass ich Dir damit helfen konnte, auch wenn Du jetzt darüber nachdenken musst, wie man in einem Array immer wieder neue Schlüssel verteilt - aber diese Funktion ist passend beschrieben in den Anfängerlektionen.

                  Kommentar


                  • #10
                    Ohje, das ist auf so vielen Ebenen falsch, das versuch gar nicht erst, nachzuvollziehen!

                    @UdoDirk: schonmal dran gedacht dass verschiedene Spieler die gleiche Punktzahl haben könnten?
                    @fschmengler - @fschmengler - @schmengler
                    PHP Blog - Magento Entwicklung - CSS Ribbon Generator

                    Kommentar


                    • #11
                      @UdoDirk: schonmal dran gedacht dass verschiedene Spieler die gleiche Punktzahl haben könnten?
                      Wow, freut mich schonmal, dass Du mitdenkst - aber gelesen haste noch kein Stück, wie das ablaufen würde, wenn es zweimal den gleichen Schlüssel innerhalb eines Arrays gibt und wie das dann berücksichtigt, sortiert oder ausgegeben werden kann - dennoch kann man wohl darüber die Sortiererei sparen, wenn man die Punktzahl als Schlüssel verwendet.

                      Es heisst auch nicht, dass einem Schlüssel auch immer nur ein Wert zugeordnet sein kann - wär ja zu blöd - umsetzen musst es freilich selbst.

                      Kommentar


                      • #12
                        Zitat von UdoDirk Beitrag anzeigen
                        Es heisst auch nicht, dass einem Schlüssel auch immer nur ein Wert zugeordnet sein kann - wär ja zu blöd - umsetzen musst es freilich selbst.
                        Das stimmt zwar, aber ich würde mich wohl für ein Array in dieser Form entscheiden:
                        PHP-Code:
                        $array = array(
                          array(
                        'Andreas'25),
                          array(
                        'Daniel'13),
                          array(
                        'Martin'37),
                        ); 
                        Dann kann ich von 0 bis count($array)-1 raufzählen und muss nicht erst die Schlüssel ermitteln und kann somit auch ganz simpel eine for-Schleife nutzen, wenn ich das wollte. Dann schaue ich noch mal kurz ins Handbuch unter dem Eintrag zu usort() und bin fertig.
                        http://hallophp.de

                        Kommentar


                        • #13
                          Vielen Dank für eure Bemühungen
                          habe mit usort auch herumexperimentiert - war auf jeden Fall lehrreich...

                          Ich hab's jetzt aber über eine Datenbank gelöst - ist im Hinblick auf zukünftige Entwicklungen der Seite das Beste - und war gar nicht mal sooo schwierig

                          Tnx noch mal
                          Andreas

                          Kommentar

                          Lädt...
                          X