2017-11-02 2 views
0

So funktioniert diese Funktion ideal fürKann ich Usort verwenden, um den primären Wert um 1 und den sekundären um den zweiten Wert zu sortieren?

  function sort($a, $b) 
      { 
       if( $a['1'] == $b['1']){ return 0 ; } 
       return ($a['1'] < $b['1']) ? -1 : 1; 
      } 
      usort($myArray,'sort'); 

von 1 Wert Array oder Objektsortierungs Aber ich mag es von Wert 1 primären und nach Wert 2 Sekunden sortieren, wenn diese mit dieser Funktion möglich ist, oder ist es nur mit einer benutzerdefinierten Funktion möglich?

+1

sollten Sie arraymulti_sort() oder array_orderby() verwenden. Weiterführende Literatur: https://stackoverflow.com/questions/4582649/php-sort-array-by-two-field-values ​​ –

+0

Danke, ich habe bereits eine Lösung gefunden, nur eine Frage, ist arraymulti_sort() weniger anspruchsvoll als Usort? – Noon

+0

diese Funktion ** ist ** eine benutzerdefinierte Funktion. Kein Grund, Sie können es nicht mehr anpassen. – apokryfos

Antwort

2

Sicher, es ist möglich. Um einen zweiten Sortierausdruck hinzuzufügen, sollten Sie den Gleichheitsfall $a['1'] == $b['1'] erweitern.

Sie sollten auch beachten, dass Sie nicht genau -1 oder 1 zurückgeben müssen - Sie können jede negative/positive Zahl verwenden. So könnte Ihr Sortierer wie folgt geschrieben werden

usort(function($a, $b) { 
    if($a['1'] == $b['1']) { 
     return $a['2'] - $b['2']; 
    } 
    return $a['1'] - $b['1']; 
}, 'sort'); 
0

Ich habe diese Funktion verwendet. Es ist wahrscheinlich nicht das effizienteste, aber im Moment funktioniert es.

  function comp($a, $b) { 
       if ($a['1'] == $b['1']) { 
        return ($a['2'] < $b['2']) ? -1 : 1; 
       } 
       return strcmp($a['1'], $b['1']); 
      } 

      usort($arr, 'comp'); 
Verwandte Themen