Array nach individueller String-Position sortieren

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

  • Array nach individueller String-Position sortieren

    Hallo,

    leider finde ich keine Lösung, einen einfachen Array

    $array = ("eins", "zwei", "drei", "vier", "fünf");

    nach einer individuellen String-Position zu sortieren, bspw. dem 2 Buchstaben eines Wortes, was dann zu diesem Ergebnis führt:

    - vier
    - eins
    - fünf
    - zwei

    Auch die Forum-Suche hat mich nicht weitergebracht :-(...


    Gruß
    elton

  • #2
    informiere dich über usort(). eine callback funktion müsste auf $a{1} und $b{1} zugreifen und entsprechend sortieren.

    Kommentar


    • #3
      Usort habe ich mir schon angesehen, aber leider nicht verstanden, wie ich diese Funktion ändern muß, um die von mir benötigte Lösung zu erhalten:

      Bin leider nicht der Crack in PHP ;-)

      Wie müßte die Funktion aussehen, um nach der 2. oder 3. Position eines Strings absteigend zu sortieren?


      Vielen Dank und Gruß
      elton

      Kommentar


      • #4
        PHP-Code:
        function cb_sort($a$b)
        {
            if (
        $a{1} == $b{1}) {
            return 
        0;
            }
            return (
        $a{1} < $b{1}) ? -1;

        oder so ähnlich.

        musst mal zusehen, dass die deutschen sonderzeichen richtig behandelt werden.

        Kommentar


        • #5
          Steht doch eigentlich alles da:

          usort

          Kommentar


          • #6
            @penizillin

            vielen Dank, funktioniert.

            Wie sieht die Funktion aus, wenn ich den Array nach dem 2. UND dem 4. Zeichen absteigend sortieren lassen möchte:

            - vier (i und r)
            - eins (i und s)
            - fünf (ü und f)
            - zwei (w und i)

            Geht das überhaupt?

            Kommentar


            • #7
              Du mußt dir halt überlegen, welcher Buchstabe wichtiger ist oder ob es durch die Kombination beider bestimmt wird. Damit meine ich den Fall vier vs. sieben und sowas.

              Wenn du dir das überlegt hast, baust du es einfach in die bisherige Funktion ein. Sind dann eben ein paar mehr Fallunterscheidungen, aber selber denken soll ja klug machen.

              Kommentar


              • #8
                Wenn ich selbst darauf kommen würde, wie man die Funktion entsprechend ändert, müßte ich nicht fragen ;-)

                Jeder lernt mal... könnt Ihr mir trotzdem dabei helfen?
                Zuletzt geändert von elton; 15.08.2005, 20:23.

                Kommentar


                • #9
                  Die Sortierung soll durch die Kombination beider (2. und 4.) Zeichen erfolgen:

                  - sieben
                  - vier
                  Zuletzt geändert von elton; 15.08.2005, 20:20.

                  Kommentar


                  • #10
                    kurze frage - worum geht es eigentlich?
                    kann es sein, dass wir an einem workaround basteln, weil am anfang nicht genug nachgedacht wurde?

                    Kommentar


                    • #11
                      Es geht um eine Funktion, die automatisch eine Liste für Teile-Codes sortiert (ET-Nummern), bspw:

                      01-AS-A345 (Kombination AA)
                      02-AF-B445 (Kombination AB)
                      02-AF-C445 (Kombination AC)
                      03-BS-A334 (Kombination BA)
                      ...

                      Die Nummern sollen Absteigend nach den entsprechenden Positionen gelistet werden.

                      Kommentar


                      • #12
                        Aber so wie du die Beispiele augelistet hast, kannst du sie mit einfachem sort() erhalten.

                        Anderenfalls sollte man schon wissen, was die einzelnen Teilstrings bedeuten; sind es Zuordnungen zu einem Produkt, Teileklassen oder sonstwas.

                        Kommentar


                        • #13
                          Die Produktnummern wurden als String so eingelesen und sind "an einem Stück" - leider völlig durcheinander.

                          Nun sollen sie nach 01-AS-A345 sortiert werden, also nach der 4. und der 7. Position in Kombination. Das eine ist die Serie, das Andere der Produktkreis:

                          01-AS-A345
                          07-AF-A348
                          08-AG-A455
                          02-AA-B367
                          03-AD-B465
                          06-AE-B535
                          ...

                          Sort bringt mir nicht das dargestellte Ergebnis...
                          Zuletzt geändert von elton; 15.08.2005, 21:51.

                          Kommentar


                          • #14
                            onemorenerd, sort() hört nach der zweiten ziffer u.u. schon auf.

                            elton, dann versuch etwas rekursives:
                            PHP-Code:
                            function cb_sort($a$b$z false)
                            {
                                
                            $nr = ($z 3);
                                
                                if (
                            $a{$nr} == $b{$nr}) {
                                    return (
                            $z cb_sort($a$btrue));
                                }
                                
                                return (
                            $a{$nr} < $b{$nr}) ? -1;

                            Kommentar


                            • #15
                              Hallo penizillin,

                              Dein Script sortiert wie gewünscht , vielen Dank!!

                              Nur leider sortiert die Funktion jetzt die "Folgebuchstaben" 5 bzw. 8 nicht entsprechend mit :-(. Muß man die auch noch extra sortieren lassen?

                              Jetzt sieht das Ergebnis so aus:

                              08-AG-A455
                              07-AF-A348
                              02-AA-B367
                              06-AE-B535
                              03-AD-B465
                              01-AS-C345
                              01-BS-A345
                              01-BS-B345

                              So wäre es semantisch richtig:

                              07-AF-A348
                              08-AG-A455
                              02-AA-B367
                              03-AD-B465
                              06-AE-B535
                              01-AS-C345
                              01-BS-A345
                              01-BS-B345

                              Also müßte nach dem Zeichen 4 noch das Zeichen 5 "nachsortiert" werden, und nach dem Zeichen 7 das Zeichen 8 - wie kann ich das realisieren (habe schon einige Zeit erfolglos mit Verschachtelungen experimentiert)

                              Kommentar

                              Lädt...
                              X