2017-02-16 3 views
2

Wie umschreiben Sie diese uasort Funktion mit <=> (Raumschiffbetreiber)?Uasort mit <=> (Raumschiffbetreiber)

uasort($hits, function($a, $b) { 
    if($a['total'] == $b['total']) { 
     if($a['vat'] == $b['vat']) { 
      return 0; 
     } else { 
      return ($a['vat'] > $b['vat']) ? -1 : 1; 
     } 
    } else { 
     return ($a['total'] > $b['total']) ? -1 : 1; 
    } 
} 

Antwort

3
return $b['total'] <=> $a['total'] ?: $b['vat'] <=> $a['vat']; 

Wenn insgesamt gleich sind, <=> kehrt 0, die Falsey ist, so dass der ?: Operator stattdessen das Ergebnis des Bottichs Vergleich wird wieder funktionieren sollte. Das erste Nicht-0-Ergebnis wird zurückgegeben.

+1

, dass eine gute Nutzung des coalesce Operator ist, obwohl Sie die Reihenfolge der Operanden auf dem Raumschiff diejenigen ändern sollte – emiliopedrollo

0

Das

uasort($hits, function($a, $b){ 
    if($a['total'] == $b['total']){ 
     return ($b['vat'] <=> $a['vat']); 
    } 
    else{ 
     return ($b['total'] <=> $a['total']); 
    } 
}); 
3

So etwas wie

uasort($hits, function($a, $b){ 
    return [$b['total'], $b['vat']] <=> [$a['total'], $a['vat']]; 
}); 
+1

Etwas dunkel, aber schöne Lösung. – deceze

Verwandte Themen