So sortieren Sie ein mehrdimensionales Array in PHP
Einführung einer verallgemeinerten Lösung für PHP 5.3
Implementierung:
function make_comparer() { // Normalize criteria up front $criteria = func_get_args(); foreach ($criteria as $index => $criterion) { $criteria[$index] = is_array($criterion) ? array_pad($criterion, 3, null) : array($criterion, SORT_ASC, null); } return function($first, $second) use (&$criteria) { foreach ($criteria as $criterion) { list($column, $sortOrder, $projection) = $criterion; $sortOrder = $sortOrder === SORT_DESC ? -1 : 1; if ($projection) { $lhs = call_user_func($projection, $first[$column]); $rhs = call_user_func($projection, $second[$column]); } else { $lhs = $first[$column]; $rhs = $second[$column]; } if ($lhs < $rhs) { return -1 * $sortOrder; } elseif ($lhs > $rhs) { return 1 * $sortOrder; } } return 0; // tiebreakers exhausted }; }
Erweiterte Funktionen:
(1) Mehrere Sortierspalten :
usort($data, make_comparer('number', 'name'));
(2) Umgekehrt Sortieren:
usort($data, make_comparer(['name', SORT_DESC]));
(3) Benutzerdefinierte Projektionen:
usort($data, make_comparer(['birthday', SORT_ASC, 'date_create']));
(4) Kombinieren Eigenschaften:
usort($data, make_comparer( ['number', SORT_DESC], ['birthday', SORT_ASC, 'date_create'] ));
Vorteile:
Das obige ist der detaillierte Inhalt vonWie sortiere ich mehrdimensionale Arrays in PHP mithilfe einer flexiblen und wiederverwendbaren Funktion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!