Ankündigung

Einklappen
Keine Ankündigung bisher.

Array nach Kommazahlen sortieren

Einklappen

Neue Werbung 2019

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

  • Array nach Kommazahlen sortieren

    Guten Morgen!

    Ich habe gegoogelt und das Forum durchforstet - ich finde allerdings keine Lösung. Vielleicht suche ich auch nach dem Falschen. Ich habe ein mehrdimensionales Array, das ich nach einem Wert sortieren möchte. Klappt aber nicht. Woran kann das liegen?

    Zuerst habe ich in einer Schleife einen Torschnitt berechnen lassen und einem Array zugewiesen.

    PHP-Code:
    $schnitt_gesamt round($anzahl_tore_gesamt/$anzahl_spiele_gesamt,2);

    $schnittliste[] = array('Name' => $key,
    'Schnitt_Gesamt' => $schnitt_auswaerts); 
    Dann habe ich das Array bearbeitet:

    PHP-Code:
    foreach ($schnittliste as $nr => $inhalt)
    {
    $name[$nr] = strtolower$inhalt['Name'] );
    $schnitt_gesamt[$nr] = $inhalt['Schnitt_Gesamt'];

    Und dann sortiert:

    PHP-Code:
    array_multisort($schnitt_gesamtSORT_DESCSORT_NUMERIC$schnittliste); 
    Es wird aber nicht sortiert. Woan kann das liegen?

    Vielen Dank für Eure Bemühungen im Voraus!

    Viele Grüße aus der Pfalz,

    Markus

  • #2
    Vermultich verwendest du array_multisort() nicht korrekt.

    Bitte ein kleines Beispiel bringen mit Daten, wo man das nachstellen kann.

    Bitte Code-Tags hier verwenden.
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Hallo hausl,

      vielen Dank für die schnelle Rückmeldung.

      Die Daten aus einer UNION-Datenbankabfrage werden aufbereitet und lauten beispielsweise:

      Name Spiele Tore
      Meier 10 5
      Müller 8 6
      Schmitt 11 3


      Der errechnete Torschnitt ist dann

      Name Torschnitt
      Meier 0,50
      Müller 0,75
      Schmitt 0,27


      Nach der Sortierung des Arrays nach dem Torschnitt erfolgt folgende Ausgabe:

      Name Torschnitt
      Meier 0,50
      Müller 0,75
      Schmitt 0,27


      Lasse ich das Array nach Spielen oder nach Toren sortieren, ist die Ausgabe richtig. Hängt das vielleicht an den Komma-Zahlen? Ich blicke es nicht...

      Viele Grüße,

      Markus

      Kommentar


      • #4
        Beispieldaten bitte als PHP-Code posten.

        Oder erwartest du, dass andere das jetzt abtippen?

        Kommentar


        • #5
          Die Daten aus einer UNION-Datenbankabfrage werden aufbereitet und lauten beispielsweise:
          Warum lässt du das nicht gleich in der DB berechnen und sortieren? Die DB kann auch rechnen.

          Code:
          SELECT name, spiele, tore, (tore / spiel) AS torschnitt from ... ORDER BY torschnitt
          oder
          Code:
          ... ORDER BY oder tore / spiel
          (das weiß ich immer nicht auswendig ob das überall funktioniert.)

          Scho sowas in die Richtung mal versucht?

          EDIT: Abgesehen davon 0,27 (mit Komma) ist nicht richtig. Wenn dann 0.27
          The string "()()" is not palindrom but the String "())(" is.

          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            Der Dezimaltrenner in PHP ist nun mal der Dezimalpunkt und nicht das Komma. Wenn du SORT_NUMERIC benutzen möchtest, mußt du schon numerisch korrekte Zahlen anbieten.

            Kommentar


            • #7
              Sorry, ist erst mein zweiter Beitrag...

              PHP-Code:
              $schnittliste[0] = array('Name'               => "Meier",
                                       
              'Schnitt_Gesamt'     => 0,5);
              $schnittliste[1] = array('Name'               => "Müller",
                                       
              'Schnitt_Gesamt'     => 0,75);
              $schnittliste[2] = array('Name'               => "Schmitt",
                                       
              'Schnitt_Gesamt'     => 0,27);

              foreach (
              $schnittliste as $nr => $inhalt)
              {
              $name[$nr] = strtolower$inhalt['Name'] );
              $schnitt_gesamt[$nr] = $inhalt['Schnitt_Gesamt'];
              }  

              array_multisort($schnitt_gesamtSORT_DESCSORT_NUMERIC$schnittliste); 
              Das müsste es sein - ist es aber nicht.

              Kommentar


              • #8
                Ich habe es auch mit Dezimalpunkten versucht - klappt nicht.

                PHP-Code:
                $schnittliste[0] = array('Name'               => "Meier",
                                         
                'Schnitt_Gesamt'     => 0.5);
                $schnittliste[1] = array('Name'               => "Müller",
                                         
                'Schnitt_Gesamt'     => 0.75);
                $schnittliste[2] = array('Name'               => "Schmitt",
                                         
                'Schnitt_Gesamt'     => 0.27);

                foreach (
                $schnittliste as $nr => $inhalt)
                {
                $name[$nr] = strtolower$inhalt['Name'] );
                $schnitt_gesamt[$nr] = $inhalt['Schnitt_Gesamt'];
                }  

                array_multisort($schnitt_gesamtSORT_DESCSORT_NUMERIC$schnittliste); 

                Kommentar


                • #9
                  Zitat von hausl Beitrag anzeigen
                  Warum lässt du das nicht gleich in der DB berechnen und sortieren? Die DB kann auch rechnen.
                  Code:
                   SELECT name, spiele, tore, (tore / spiel) AS torschnitt FROM ...
                  Bitte noch um Info dazu.
                  The string "()()" is not palindrom but the String "())(" is.

                  Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                  PHP.de Wissenssammlung | Kein Support per PN

                  Kommentar


                  • #10
                    Hallo hausl,

                    aufgrund der Datenbankstruktur ist eine Berechnung im Select-Befehl nicht möglich.

                    Ich habe es aber gelöst. Es lag nicht am Befehl array_multisort und auch nicht am Datenformat. Ich hatte bei meiner Berechnung des Toreschnitts die gleiche Variable benutzt wie bei der Aufarbeitung des Arrays. Wie ich die Variablen verändert habe, klappt es. Ich verstehe das nicht 100%ig, nehme es aber hin.

                    Dennoch vielen Dank für Eure Hilfe!!!

                    Viele Grüße aus der Pfalz,

                    Markus

                    Kommentar


                    • #11
                      Zitat von ochsenkiller Beitrag anzeigen
                      Hallo hausl,

                      aufgrund der Datenbankstruktur ist eine Berechnung im Select-Befehl nicht möglich.
                      Glaube ich erst wenn du mir die Datenstruktur zeigst.

                      Solange siehe SQLFiddle.

                      Kommentar

                      Lädt...
                      X