fantomas: Array nach Key sortieren

Salut Leute.

Ich bin kein PHP-Entwickler, muss allerdings ein Template(PHP+FPDF) anpassen.

Ist es möglich ein Array nach einem bestimmten Key zu sortieren?

(es gibt keine Möglichkeit die SQL-Abfrage zu bearbeiten).

  1. Ist es möglich ein Array nach einem bestimmten Key zu sortieren?

    Ja - und ich verwette viel darauf, dass du nichtmal versucht hast, das selbst rauszufinden.

    1. Ja - und ich verwette viel darauf, dass du nichtmal versucht hast, das selbst rauszufinden.

      Wette verloren!

      krsort wäre die richtige Funktion?! Nicht wahr?

      Fehler: krsort() expects parameter 1 to be array, string given in

      Ich besitze die Schleife:
      foreach ($var_array['pos'] as $key => $value)
      und muss nach dem Key sortieren: $value['vars_pos_txt']

      1. Ja - und ich verwette viel darauf, dass du nichtmal versucht hast, das selbst rauszufinden.

        Wette verloren!

        krsort wäre die richtige Funktion?! Nicht wahr?

        krsort() ist eine Möglichkeit, ein Array nach Schlüsseln zu sortieren, ja. Wenn die Funktionsweise deinen Bedürfnissen entspricht, verwende sie.

        Fehler: krsort() expects parameter 1 to be array, string given in

        Ich besitze die Schleife:
        foreach ($var_array['pos'] as $key => $value)
        und muss nach dem Key sortieren: $value['vars_pos_txt']

        Die Fehlermeldung hat nichts mit dem von dir gezeigten Code zu tun, da kommt krsort() nicht vor - falsche Zeile.

        Die Fehlermeldung sagt aber eigentlich ganz deutlich was du falsch machst: du fütterst krsort() mit einem String obwohl die Funktion logischerweise ein Array erwartet.

        1. Die Fehlermeldung hat nichts mit dem von dir gezeigten Code zu tun, da kommt krsort() nicht vor - falsche Zeile.

          Die Fehlermeldung sagt aber eigentlich ganz deutlich was du falsch machst: du fütterst krsort() mit einem String obwohl die Funktion logischerweise ein Array erwartet.

          Du hast recht. Die Fehlermeldung habe ich auch verstanden.
          Ich hätte meine frage anders formulieren sollen aber:
          Wie komme ich an den Schlüssel des Array ran, um danach nach dem zu sortieren.

          Danke Dir!

          1. Hi!

            Wie komme ich an den Schlüssel des Array ran, um danach nach dem zu sortieren.

            Die Array-Sortierfunktionen finden den Schlüssel des übergebenen Arrays von selbst. Du möchtest vermutlich etwas anderes. Wie sieht beispielhaft die zu sortierende Datenmenge aus (zeig mal von der print_r($das_array)-Ausgabe die ersten 2 "Datensätze")? Und wonach genau soll sortiert werden.

            Lo!

            1. Hi!

              Hi.

                
              Array (  
                
              [0] => Array ( [id] => 694 [invoices_id] => 130 [quantity] => 12 [unit] => x [pos_txt] => TEXTTEXT [price] => 5.00000000000000 [sortno] => 0 [discount] => 0 [tax] => 19 [article_id] => 38 [tax_value] => 11.4 [discount_value] => 0 [tprice] => 60 [rounded_tprice] => 60 [curr_tax_value] => 11.4 [curr_discount_value] => 0 [curr_price] => 5 [curr_tprice] => 60 [rounded_curr_tprice] => 60 [vars_pos_txt] => TEXTTEXT )  
                
              [1] => Array ( [id] => 693 [invoices_id] => 130 [quantity] => 1 [unit] => x [pos_txt] => TEXTTEXT [price] => 11.68000000000000 [sortno] => 1 [discount] => 0 [tax] => 19 [article_id] => 42 [tax_value] => 2.2192 [discount_value] => 0 [tprice] => 11.68 [rounded_tprice] => 11.68 [curr_tax_value] => 2.2192 [curr_discount_value] => 0 [curr_price] => 11.68 [curr_tprice] => 11.68 [rounded_curr_tprice] => 11.68 [vars_pos_txt] => TEXTTEXT )  
                
              )  
              
              

              Ich glaube mein Denkfehler verstanden zu haben. Ich möchte nach erm 'TEXTTEXT' das Array sortiert haben.

              1. Ich glaube mein Denkfehler verstanden zu haben. Ich möchte nach erm 'TEXTTEXT' das Array sortiert haben.

                Dann ist wohl eher array_multisort() oder uasort() etwas für dich.

                1. Hi!

                  Ich glaube mein Denkfehler verstanden zu haben. Ich möchte nach erm 'TEXTTEXT' das Array sortiert haben.
                  Dann ist wohl eher array_multisort() oder uasort() etwas für dich.

                  array_multisort() ist Mist, es benötigt eine andere Struktur. Üblicher- und einfacherweise nimmt man eine der u*sort-Funktionen und eine benutzerdefinierte Vergleichsfunktion.

                  Lo!

                  1. Ich glaube mein Denkfehler verstanden zu haben. Ich möchte nach erm 'TEXTTEXT' das Array sortiert haben.
                    Dann ist wohl eher array_multisort() oder uasort() etwas für dich.

                    array_multisort() ist Mist, es benötigt eine andere Struktur. Üblicher- und einfacherweise nimmt man eine der u*sort-Funktionen und eine benutzerdefinierte Vergleichsfunktion.

                    Das umformen in eine andere Struktur, sortieren und wieder zurückübertragen ist aber imho für einen Einsteiger einfacher zu verstehen als eine benutzerdefinierte Vergleichsfunktion.

                    1. Hi!

                      array_multisort() ist Mist, es benötigt eine andere Struktur. Üblicher- und einfacherweise nimmt man eine der u*sort-Funktionen und eine benutzerdefinierte Vergleichsfunktion.
                      Das umformen in eine andere Struktur, sortieren und wieder zurückübertragen ist aber imho für einen Einsteiger einfacher zu verstehen als eine benutzerdefinierte Vergleichsfunktion.

                      Finde ich nicht, denn die Daten liegen dann nicht mehr pro Satz in einem Array sondern sind über mehrere Arrays verteilt. Das muss man erst einmal verstehen, damit man sie so hinbiegen und daraus wieder zurückbringen kann. (Für die Sortierung nach nur einem Kriterium braucht es dann auch kein array_multisort() mehr.) Außerdem sind das zwei zu programmierende Dinge, oder nur eins nebst Umstellen des danach darauf zugreifenden Codes, die benutzerdefinierte Funktion ist nur eins, sehr oft verwendet und damit dokumentiert. Und in der Regel ist es mit Verwendung von str(case)cmp() nur ein Einzeiler.

                      Lo!

                      1. Vielen lieben Dank!

                        Habs folgendermaßen hinbekommen:

                          
                        $tmp = Array();  
                        foreach($var_array['pos'] as &$ma)  
                            $tmp[] = &$ma['pos_txt'];  
                        array_multisort($tmp, SORT_DESC, $var_array['pos']);