Der Martin: array_multisort() - Array sizes are inconsistent

Beitrag lesen

Hallo,

Nutze usort()!

Und zum Vergleichen:

function gewicht_preis_compare($a, $b) {

if ($a['Gewicht'] == $b['Gewicht']) {
    if ($a['Preis'] == $b['Preis']) {
      return 0;
    }
    return ($a['Preis'] < $b['Preis']? -1 : 1);
  }
  return ($a['Gewicht'] < $b['Gewicht']? -1 : 1);
}

  
Und das kann man bei gleicher Funktionalität noch etwas kürzer und übersichtlicher schreiben:  
  
~~~php
function gewicht_preis_compare($a, $b)  
 { return ($a['Gewicht']==$b['Gewicht'] ? $b['Preis']-$a['Preis'] : $b['Gewicht']-$a['Gewicht']);  
 }

Wenn das Gewicht gleich ist, gib die Preisdifferenz als Kriterium zurück; andernfalls die Gewichtsdifferenz.
Die Vergleichsfunktion für usort() muss nur 0 für Gleichheit, ansonsten einen Wert <0 bzw. >0 liefern. Der Betrag ist egal. Deshalb ist ein expliziter Vergleich mit nachfolgender Entscheidung für +1 oder -1 nicht nötig, man kann direkt die Differenz zurückgeben und ausnutzen, dass ein Vergleich arithmetisch gesehen nichts anderes als eine Differenzbetrachtung ist.

Ciao,
 Martin

--
Du kannst dem Leben nicht mehr Tage geben.
Aber dem Tag mehr Leben.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(