Tom: Array - Multidimensionale sortieren

Beitrag lesen

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>