Nina-K: Array - Multidimensionale sortieren

Hallo,

als erstes ich habe mit PHP seit ca. 4 Tagen zu tun von daher bitte nicht gleich erschlagen, wenn mein Wissen defizitär ist.

Folgender Hintergrund, ich habe ein Multidimensionales Array, welches ich mit folgenden Funktionen sortieren kann:

Nach Preis

function sortieren_preis($wert_a, $wert_b)  
  {  
      // Sortierung nach dem zweiten Wert des Array (Index: 5)  
      $a = $wert_a[5];  
      $b = $wert_b[5];  
  
      if ($a == $b) {  
          return 0;  
     }  
  
     return ($a < $b) ? -1 : +1;  
 }

Nach Lieferbarkeit

 function sortieren_lieferbar($wert_a, $wert_b)  
  {  
      // Sortierung nach dem zweiten Wert des Array (Index: 8)  
      $a = $wert_a[8];  
      $b = $wert_b[8];  
  
      if ($a == $b) {  
          return 0;  
     }  
  
     return ($a < $b) ? -1 : +1;  
 }

Beide funktionieren soweit richtig. Das Problem ist, wenn ich nach Lieferbarkeit sortiere sind mehrere Artikel "Lieferbar", dann möchte ich gerne eine sortieren nach Preis.

Beispiel aus:
Lieferant 1; Lieferbar "Sofort"; Preis 13,76;
Lieferant 2; Lieferbar "Sofort"; Preis 18,66;
Lieferant 3; Lieferbar "Sofort"; Preis 14,76;
Lieferant 4; Lieferbar "Morgen"; Preis 13,77;
Lieferant 5; Lieferbar "Morgen"; Preis 13,76;

wird:
Lieferant 1; Lieferbar "Sofort"; Preis 13,76;
Lieferant 3; Lieferbar "Sofort"; Preis 14,76;
Lieferant 2; Lieferbar "Sofort"; Preis 18,66;
Lieferant 5; Lieferbar "Morgen"; Preis 13,76;
Lieferant 4; Lieferbar "Morgen"; Preis 13,77;

Meine Idee war zuerst nach Preis und dann nach Lieferbarkeit zu sortieren:

usort($result, 'sortieren_preis');  
usort($result, 'sortieren_lieferbar');

Das führte aber nicht zu einem zufriedenstellenden Ergebnis. Wo haben ich den Gedankenfehler?

Nina

  1. Hi,

    Das Problem ist, wenn ich nach Lieferbarkeit sortiere sind mehrere Artikel "Lieferbar", dann möchte ich gerne eine sortieren nach Preis.

    Meine Idee war zuerst nach Preis und dann nach Lieferbarkeit zu sortieren:

    usort($result, 'sortieren_preis');

    usort($result, 'sortieren_lieferbar');

    
    > Das führte aber nicht zu einem zufriedenstellenden Ergebnis. Wo haben ich den Gedankenfehler?  
      
    In der Reihenfolge der Operationen - die du im ersten zitierten Satz festlegst, und anschließend aber genau anders herum umsetzt?  
      
    MfG ChrisB  
      
    
    -- 
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    
    1. Hallo ChrisB,

      ich bin mir nicht sicher was gemeint ist, wie gesagt ich habe mit PHP und Programmieren bisher nichts zu tun gehabt.

      Ich habe es gerade anders herum probiert aus:

      usort($result, 'sortieren_preis');
      usort($result, 'sortieren_lieferbar');

      wird

      usort($result, 'sortieren_lieferbar');
      usort($result, 'sortieren_preis');

      Leider sind hier "fast" keine Abhängigkeiten zu erkennen. Artikel die Lieferbar sind werden teilweise hinter nicht lieferbaren gelistet.

      Nina-K

      1. Hi,

        Leider sind hier "fast" keine Abhängigkeiten zu erkennen. Artikel die Lieferbar sind werden teilweise hinter nicht lieferbaren gelistet.

        Ach so war das gemeint ...
        Du hast zwei Sortierkriterien, aber willst eigentlich nur eine Sortierung durchführen.

        Dann mach das - vergleiche in deiner Sortierfunktion zuerst die zwei Elemente hinsichtlich der Lieferbarkeit, und wenn diese gleich ist, dann nach dem Preis.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Dann mach das - vergleiche in deiner Sortierfunktion zuerst die zwei Elemente hinsichtlich der Lieferbarkeit, und wenn diese gleich ist, dann nach dem Preis.

          Und wie mache ich das?

          1. Hi,

            Dann mach das - vergleiche in deiner Sortierfunktion zuerst die zwei Elemente hinsichtlich der Lieferbarkeit, und wenn diese gleich ist, dann nach dem Preis.

            Und wie mache ich das?

            In dem du das, was dort verbal beschrieben ist, versuchst in Programmcode umzusetzen ...?
            Bedingte Anweisungen kennst du doch offenbar schon.

            Also, wie sieht dein Ansatz aus?

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. Hallo ChrisB,

              ich denke ich muss irgendwie die funktion auf bohren. Aus Preis und Lieferbarkeit quasi einen Bausatz machen.

               function sortieren_lieferbarkeit($wert_a, $wert_b, $wert_c, $wert_d)  
                {  
                    $a = $wert_a[5];  
                    $b = $wert_b[5];  
                    $c = $wert_c[8];  
                    $d = $wert_d[8];  
                
                 if (($a == $b)&($c == $d)  {  
                        return 0;  
                   }  
              
              

              aber was dann?

              eine verzweifelte NINA

              Hi,

              Dann mach das - vergleiche in deiner Sortierfunktion zuerst die zwei Elemente hinsichtlich der Lieferbarkeit, und wenn diese gleich ist, dann nach dem Preis.

              Und wie mache ich das?

              In dem du das, was dort verbal beschrieben ist, versuchst in Programmcode umzusetzen ...?
              Bedingte Anweisungen kennst du doch offenbar schon.

              Also, wie sieht dein Ansatz aus?

              MfG ChrisB

              1. Hello,

                aber was dann?

                eine verzweifelte NINA

                Fang doch mal vorne an und nicht immer mittendrin!
                Wie sieht das Ausgangsarray aus?

                Liebe Grüße aus dem schönen Oberharz

                Tom vom Berg

                --
                 ☻_
                /▌
                / \ Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
                1. Fang doch mal vorne an und nicht immer mittendrin!
                  Wie sieht das Ausgangsarray aus?

                  Array  
                  (  
                      [0] => Array  
                          (  
                              [0] => Erbsen  
                              [1] => in der Dose  
                              [2] => Herkunft Polen  
                              [3] => 11.88  
                              [4] => 0  
                              [5] => 11.88  
                              [6] => bis 1 kg  
                              [7] => 1  
                              [8] => 5  
                              [9] => 0  
                              [10] => 1  
                              [11] => 1  
                              [12] => 0  
                              [13] => 0  
                              [14] => 0  
                              [15] => 1  
                              [16] =>  
                              [17] =>  
                          )  
                    
                      [1] => Array  
                          (  
                              [0] => Erbsen  
                              [1] => Deutschländer  
                              [2] => Herkunft Deutschland  
                              [3] => 8.50  
                              [4] => 0  
                              [5] => 8.5  
                              [6] => 10 kg  
                              [7] => 1  
                              [8] => 2  
                              [9] => 750  
                              [10] => 0  
                              [11] => 1  
                              [12] => 0  
                              [13] => 0  
                              [14] => 0  
                              [15] => 1  
                              [16] =>  
                              [17] => 1296245509.jpg  
                          )  
                    
                      [2] => Array  
                          (  
                              [0] => Erbsen  
                              [1] => Goldbraun  
                              [2] => Herkunft Marroko  
                              [3] => 52.00  
                              [4] => 0  
                              [5] => 52  
                              [6] => bis 50 kg  
                              [7] => 1  
                              [8] => 3  
                              [9] => 500  
                              [10] => 0  
                              [11] => 1  
                              [12] => 0  
                              [13] => 0  
                              [14] => 0  
                              [15] => 2  
                              [16] =>  
                              [17] => 296245509.jpg  
                          )  
                  
                  
                  1. Hello,

                    Fang doch mal vorne an und nicht immer mittendrin!
                    Wie sieht das Ausgangsarray aus?

                    $_products = Array(

                    [0] => Array
                            (
                                [0] => Erbsen
                                [1] => in der Dose
                                [2] => Herkunft Polen
                                [3] => 11.88
                                [4] => 0
                                [5] => 11.88
                                [6] => bis 1 kg
                                [7] => 1
                                [8] => 5
                                [9] => 0
                                [10] => 1
                                [11] => 1
                                [12] => 0
                                [13] => 0
                                [14] => 0
                                [15] => 1
                                [16] =>
                                [17] =>
                            )

                    [1] => Array
                            (
                                [0] => Erbsen
                                [1] => Deutschländer
                                [2] => Herkunft Deutschland
                                [3] => 8.50
                                [4] => 0
                                [5] => 8.5
                                [6] => 10 kg
                                [7] => 1
                                [8] => 2
                                [9] => 750
                                [10] => 0
                                [11] => 1
                                [12] => 0
                                [13] => 0
                                [14] => 0
                                [15] => 1
                                [16] =>
                                [17] => 1296245509.jpg
                            )

                    [2] => Array
                            (
                                [0] => Erbsen
                                [1] => Goldbraun
                                [2] => Herkunft Marroko
                                [3] => 52.00
                                [4] => 0
                                [5] => 52
                                [6] => bis 50 kg
                                [7] => 1
                                [8] => 3
                                [9] => 500
                                [10] => 0
                                [11] => 1
                                [12] => 0
                                [13] => 0
                                [14] => 0
                                [15] => 2
                                [16] =>
                                [17] => 296245509.jpg

                    );

                      
                      
                    Was soll sortiert werden?        -> das Array $\_products  
                    Wonach soll es sortiert werden?  -> Nach Subelement 'available'  
                                                           (ich nehme hier mal den Index [8] an)  
                                                        und nach dem Element 'price'  
                                                           (hier mehme ich den Index [3] an)  
                      
                    Du benötigst also eine Funktion, die  
                      
                        cmp\_function  
                      
                        The comparison function must return an integer less than,  
                        equal to, or greater than zero if the first argument is  
                        considered to be respectively less than, equal to,  
                        or greater than the second.  
                      
                    dieser Bedingung genügt.  
                      
                        function available\_price($a, $b)  
                        {  
                            if ($a[8] == $b[8])  
                            {  
                                if ($a[3] > $b[3]) return 1;        ## hier mal nicht in Nassi-Shniderman  
                                if ($a[3] < $b[3]) return (-1);     ##  
                                if ($a[3] == $b[3]) return 0;       ##  
                            }  
                            elseif ($a[8] > $b[8])  
                            {  
                                return 1;  
                            }  
                            else  
                            {  
                                return (-1);  
                            }  
                        }  
                      
                    die obige Funktiohn kannst Du mit boolescher Algebra noch nach Belieben umformen, vereinfachen, usw.  
                    Sie vergleicht und sortiert nach den Verfügbarkeitsmengen und bei gleicher Verfügbarkeit (if-Zweig) nach dem Preis.  
                      
                      
                    Baumuster:  
                      
                         bool      usort ( array &$array , callback $cmp\_function )  
                      
                    eingesetzt:  
                      
                         $sorted = usort ( $\_products, 'available\_price');  
                      
                    anschließend sollte in $sortet der Wert TRUE drinstehen und das Array $\_products nach deinen Wünschen sortiert sein.  
                      
                      
                      
                      
                      
                      
                      
                    Liebe Grüße aus dem schönen Oberharz  
                      
                      
                    Tom vom Berg  
                    ![](http://selfhtml.bitworks.de/Virencheck.gif)  
                      
                    
                    -- 
                     ☻\_  
                    /▌  
                    / \ Nur selber lernen macht schlau  
                    <http://bergpost.annerschbarrich.de>
                    
                    1. Hi!

                      function available_price($a, $b)
                          {
                              if ($a[8] == $b[8])
                              {
                                  if ($a[3] > $b[3]) return 1;        ## hier mal nicht in Nassi-Shniderman
                                  if ($a[3] < $b[3]) return (-1);     ##
                                  if ($a[3] == $b[3]) return 0;       ##
                              }
                              elseif ($a[8] > $b[8])
                              {
                                  return 1;
                              }
                              else
                              {
                                  return (-1);
                              }
                          }

                      Mit weniger Code sieht das bei gleicher Funktionalität so aus:

                      function available_price($a, $b) {
                          if ($a[8] == $b[8])
                            return $a[3] - $b[3];
                          return $a[8] - $b[8];
                        }

                      Lo!

                      1. Hi dedlfix.

                        Mit weniger Code sieht das bei gleicher Funktionalität so aus:

                        function available_price($a, $b) {
                            if ($a[8] == $b[8])
                              return $a[3] - $b[3];
                            return $a[8] - $b[8];
                          }

                        Und fuers Protokoll:
                        Mit weniger Code sieht das bei gleicher Funktionalitaet so aus (ab PHP 5.3):

                        function available_price($a, $b) {  
                            return $a[8] - $b[8] ?: $a[3] - $b[3];  
                        }
                        

                        Ob das die Lesbarkeit foerdert, ist etwas Geschmacksache. So oder so sollte die Funktion aber einen praeziseren Namen kriegen.

                        Viele Gruesse,
                        der Bademeister

                        1. Hello,

                          Und fuers Protokoll:
                          Mit weniger Code sieht das bei gleicher Funktionalitaet so aus (ab PHP 5.3):

                          function available_price($a, $b) {

                          return $a[8] - $b[8] ?: $a[3] - $b[3];
                          }

                            
                          Fehlt da nicht was?  
                            
                          Außerdem sträube ich mich immer, die automatische Typumwandlung auf diese Weise zu missbauchen.  
                            
                            
                            
                            
                          Liebe Grüße aus dem schönen Oberharz  
                            
                            
                          Tom vom Berg  
                          ![](http://selfhtml.bitworks.de/Virencheck.gif)  
                            
                          
                          -- 
                           ☻\_  
                          /▌  
                          / \ Nur selber lernen macht schlau  
                          <http://bergpost.annerschbarrich.de>
                          
                          1. Hi Tom.

                            Fehlt da nicht was?

                            PHP 5.3 fuehrt die Syntax "A ?: B" als Aequivalent zu "A ? A : B" ein.

                            Außerdem sträube ich mich immer, die automatische Typumwandlung auf diese Weise zu missbauchen.

                            Ist mir jetzt nicht ganz klar, wo Du einen Missbrauch siehst. Aus der Doku zu usort:

                            "Die Vergleichsfunktion muss einen Integerwert kleiner als, gleich oder größer als 0 zurückgeben je nachdem ob das erste übergebene Argument kleiner als, gleich oder größer als das zweite ist."

                            Genau das geschieht doch hier. Oder?

                            Viele Gruesse,
                            der Bademeister

                            1. Hello,

                              Fehlt da nicht was?

                              PHP 5.3 fuehrt die Syntax "A ?: B" als Aequivalent zu "A ? A : B" ein.

                              Ach, wieder eine Neuerung, die ich bestimmt nicht nutzen werde :-P

                              Aber ich dachte mir schon, dass Du da 'was gefunden hattest. Sonst hättest Du ja nicht die Version dazugeschrieben.

                              Aber die Logik stimmt doch jetzt nicht mehr, oder denke ich jetzt verkehrt herum?

                              function available_price($a, $b)
                                  {
                                      return $a[8] - $b[8] ?: $a[3] - $b[3];
                                  }

                              Der Ausdruck ($a[3] - $b[3]) soll nur ausgewertet werden, wenn der Ausdruck ($a[8] - $b[8]) == 0 ist, also $a[8] == $b[8] ist.

                              Bei Dir wird der Ausdruck aber ausgewertet, wenn ($a[8] == $b[8]) ist ODER ($a[8] < $b[8]) ist.

                              Das war nicht die Aufgabe.

                              Liebe Grüße aus dem schönen Oberharz

                              Tom vom Berg

                              --
                               ☻_
                              /▌
                              / \ Nur selber lernen macht schlau
                              http://bergpost.annerschbarrich.de
                              1. Hi,

                                PHP 5.3 fuehrt die Syntax "A ?: B" als Aequivalent zu "A ? A : B" ein.

                                oh, sieht zunächst verwirrend aus, könnte aber elegant sein.

                                Aber die Logik stimmt doch jetzt nicht mehr, oder denke ich jetzt verkehrt herum?

                                Vielleicht ...

                                return $a[8] - $b[8] ?: $a[3] - $b[3];

                                "Gib ($a[8]-$b[8]) zurück, wenn es nicht 0 ist (wenn also $a[8] und $b[8] unterschiedlich sind), sonst ($a[3]-$b[3])."

                                Der Ausdruck ($a[3] - $b[3]) soll nur ausgewertet werden, wenn der Ausdruck ($a[8] - $b[8]) == 0 ist, also $a[8] == $b[8] ist.

                                Genau. Passt doch. :-)

                                Bei Dir wird der Ausdruck aber ausgewertet, wenn ($a[8] == $b[8]) ist ODER ($a[8] < $b[8]) ist.

                                Hä?

                                So long,
                                 Martin

                                --
                                Rizinus hat sich angeblich als sehr gutes Mittel gegen Husten bewährt.
                                Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                                1. Hello,

                                  return $a[8] - $b[8] ?: $a[3] - $b[3];

                                  "Gib ($a[8]-$b[8]) zurück, wenn es nicht 0 ist (wenn also $a[8] und $b[8] unterschiedlich sind), sonst ($a[3]-$b[3]).

                                  Das steht da nicht! Da steht:

                                  "Gib ($a[8]-$b[8]) zurück, wenn es größer als 0 ist, sonst ($a[3]-$b[3])"

                                  Liebe Grüße aus dem schönen Oberharz

                                  Tom vom Berg

                                  --
                                   ☻_
                                  /▌
                                  / \ Nur selber lernen macht schlau
                                  http://bergpost.annerschbarrich.de
                                  1. Hi,

                                    return $a[8] - $b[8] ?: $a[3] - $b[3];
                                    "Gib ($a[8]-$b[8]) zurück, wenn es nicht 0 ist (wenn also $a[8] und $b[8] unterschiedlich sind), sonst ($a[3]-$b[3]).
                                    Das steht da nicht! Da steht:
                                    "Gib ($a[8]-$b[8]) zurück, wenn es größer als 0 ist, sonst ($a[3]-$b[3])"

                                    wo steht das? Der Bademeister hat zitiert, der Ausdruck "A ?: B" sei äquivalent zu "A ? A : B". Also "wenn A nicht 0 ist, nimm A, sonst B".

                                    Wo siehst du ein "größer"?

                                    So long,
                                     Martin

                                    --
                                    Eine Nonne kommt in den Himmel. An der Pforte fragt Petrus: "Wer bist du?" - "Ich bin die Braut Jesu." Petrus stutzt einen Moment, ruft dann nach hinten: "He Freunde, habt ihr schon gehört? Der Juniorchef will heiraten!"
                                    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                                    1. Hello,

                                      wo steht das? Der Bademeister hat zitiert, der Ausdruck "A ?: B" sei äquivalent zu "A ? A : B". Also "wenn A nicht 0 ist, nimm A, sonst B".

                                      Ok, stimmt.

                                      negative Werte validieren bei PHP ja auch zu TRUE.
                                      Nur 0 validiert zu FALSE :-|

                                      http://de2.php.net/manual/de/types.comparisons.php

                                      Da wird es aber langsam unheimlich mit den Typumwandlungen und Festlegungen und ist wirklich nicht mehr auf einen Blick lesbar.

                                      Liebe Grüße aus dem schönen Oberharz

                                      Tom vom Berg

                                      --
                                       ☻_
                                      /▌
                                      / \ Nur selber lernen macht schlau
                                      http://bergpost.annerschbarrich.de
                                      1. Hi,

                                        wo steht das? Der Bademeister hat zitiert, der Ausdruck "A ?: B" sei äquivalent zu "A ? A : B". Also "wenn A nicht 0 ist, nimm A, sonst B".
                                        Ok, stimmt.
                                        negative Werte validieren bei PHP ja auch zu TRUE.

                                        natürlich, da reiht sich PHP lustig mit anderen Sprachen ein: Javascript, C/C++ handhaben es genauso.

                                        Nur 0 validiert zu FALSE :-|

                                        Genau. Ganz intuitiv. :-)
                                        Damals[tm] in BASIC war es noch üblich, dass TRUE durch den Wert -1 (=0xFFFF) dargestellt wurde, aber jeder andere Wert ungleich 0 ebenfalls als TRUE galt.

                                        Da wird es aber langsam unheimlich mit den Typumwandlungen und Festlegungen und ist wirklich nicht mehr auf einen Blick lesbar.

                                        Hmm, finde ich nicht - im Gegenteil. Der Operator :? ohne Operand dazwischen sieht zunächst ungewohnt aus, verhält sich aber dann genau so, wie man es erwarten würde.

                                        So long,
                                         Martin

                                        --
                                        Ich bin im Prüfungsstress, ich darf Scheiße sagen.
                                          (Hopsel)
                                        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                                        1. Hi Martin.

                                          Hmm, finde ich nicht - im Gegenteil. Der Operator :? ohne Operand dazwischen sieht zunächst ungewohnt aus,

                                          Das koennte damit zusammenhaengen, dass er falsch rum ist ;-p

                                          verhält sich aber dann genau so, wie man es erwarten würde.

                                          Sehe ich genauso. Ich wuerde schaetzen, dass in der Praxis in mehr als der Haelfte aller Anwendungsfaelle von "A ? C : B" die ersten beiden Ausdruecke, A und C, identisch sind. Da ist diese Kurzform ein Segen, finde ich - es ging mir so auf den Senkel, den Ausdruck immer zweimal schreiben zu muessen.

                                          Viele Gruesse,
                                          der Bademeister

                                          1. Hallo,

                                            Der Operator :? ohne Operand dazwischen sieht zunächst ungewohnt aus,
                                            Das koennte damit zusammenhaengen, dass er falsch rum ist ;-p

                                            stimmt auffallend. Hey, hat mir da jemand was ins Bier getan? ;-)

                                            verhält sich aber dann genau so, wie man es erwarten würde.
                                            Ich wuerde schaetzen, dass in der Praxis in mehr als der Haelfte aller Anwendungsfaelle von "A ? C : B" die ersten beiden Ausdruecke, A und C, identisch sind.

                                            In meiner bisherigen langjährigen Programmiererfahrung war das eher ein Sonderfall, kam aber durchaus ab und zu vor.

                                            Da ist diese Kurzform ein Segen, finde ich - es ging mir so auf den Senkel, den Ausdruck immer zweimal schreiben zu muessen.

                                            ACK. Javascript bietet ja dieselbe Funktionalität mit der Oder-Operator ||, was zu begreifen mich erst einige Überwindung kostete, wo ich doch den Operator || von C bis dahin nur als reinen boolschen Operator kannte. Da ist es meiner Ansicht nach weniger intuitiv gelöst als jetzt in PHP.

                                            So long,
                                             Martin

                                            --
                                            Krankenschwester zum fassungslosen Vater von Drillingen: Nein, Sie sollen sich keins aussuchen! Alle drei sind Ihre!
                                            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                          2. Hi!

                            Außerdem sträube ich mich immer, die automatische Typumwandlung auf diese Weise zu missbauchen.

                            Es ist eher so, dass deine Version Probleme mit falschen Typen bekommen kann. Wenn die betreffenden Array-Inhalte vom Typ String sind, wird zeichenweise verglichen. Bei der Ermittlung des Ergebnisses mit Subtraktion werden eventuelle Strings in Zahlen gewandelt und dann diese miteinander verglichen. Wenn es Stringvergleiche sein sollen, geht es beispielsweise mit der Funktion strcmp() einzeilig.

                            Lo!

                            1. Hello,

                              Außerdem sträube ich mich immer, die automatische Typumwandlung auf diese Weise zu missbauchen.

                              Es ist eher so, dass deine Version Probleme mit falschen Typen bekommen kann. Wenn die betreffenden Array-Inhalte vom Typ String sind, wird zeichenweise verglichen. Bei der Ermittlung des Ergebnisses mit Subtraktion werden eventuelle Strings in Zahlen gewandelt und dann diese miteinander verglichen. Wenn es Stringvergleiche sein sollen, geht es beispielsweise mit der Funktion strcmp() einzeilig.

                              Da kann man mal sehen, wie lange man sich über ein im ersten Augenblick so einfaches Problem Gedanken machen kann/muss.

                              Ob die Daten überhaupt vorliegen und dann auch im richtigen Typ, haben wir ja sowieso noch nicht geprüft. Das muss sichergestellt werden. Wenn die "Datensätze" unvollständig sind, kracht es sonst vielleicht auch.

                              Liebe Grüße aus dem schönen Oberharz

                              Tom vom Berg

                              --
                               ☻_
                              /▌
                              / \ Nur selber lernen macht schlau
                              http://bergpost.annerschbarrich.de
              2. Hi,

                bitte kein TOFU, sondern sillvolles Zitieren - nur das, worauf du dich jeweils konkret beziehst. Schau es dir bei anderen Teilnehmern hier an. Danke.

                ich denke ich muss irgendwie die funktion auf bohren. Aus Preis und Lieferbarkeit quasi einen Bausatz machen.

                Du willst zwei Vergleichkriterien nacheinander abprüfen.

                Wenn die Lieferbarkeit der zwei zu vergleichenden Einträge sich unterscheidet - dann triffst du davon abhängig die Entscheidung, welcher von beiden vor dem anderen einzuordnen ist.

                Und wenn die Lieferbarkeit bei den beiden gleich ist - dann ziehst du anschließend den Preis als Vergleichskriterium heran.

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  2. 'ǝɯɐu$ ıɥ

    Meine Idee war zuerst nach Preis und dann nach Lieferbarkeit zu sortieren:

    usort($result, 'sortieren_preis');

    usort($result, 'sortieren_lieferbar');

    
    > Das führte aber nicht zu einem zufriedenstellenden Ergebnis. Wo haben ich den Gedankenfehler?  
      
    du wills also das ergebnis der ersten sortierung erneut sortieren? tus doch einfach ;-)  
      
    ssnɹƃ  
    ʍopɐɥs
    
    -- 
    Hey Santa! How much for your list of naughty boys?
    
  3. Hello,

    wie würdest Du das denn in einer Datenbank machen?

    Wenn DU erst nach Spalte-1 sortierst, und dann das Ergebnis nach Spalte-2 sortierst, nach welchem Kriterum wäre dann das Endergebnis sortiert?

    Ich nehme an, dass die Kriterien im "Array" in derselben Priorität im Baum eingespeichert stehen.

    Entweder, du sortiertst mit einer kombinierten Funktion beide Kriterien auf einmal, oder Du baust Dir einen Kombinationsschlüssel auf, den Du dann sortieren kannst.

    Zeig doch bitte mal das Ausgangsarray mit ein paar "Datensätzen".

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de