Heim >Backend-Entwicklung >PHP-Tutorial >Wie sortiere ich ein mehrdimensionales PHP-Array effizient nach Spalten, einschließlich Datumsangaben und benutzerdefinierten Kriterien?
Wie ordnet man ein mehrdimensionales Array effizient basierend auf einer bestimmten Spalte an? insbesondere wenn die Daten Datumsangaben enthalten und Sie individuelle Sortierkriterien wünschen?
Einführung einer erweiterten Lösung für PHP 5.3
Diese Lösung bietet mehrere Vorteile:
function make_comparer() { // Normalize criteria $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) { // Comparison details list($column, $sortOrder, $projection) = $criterion; $sortOrder = $sortOrder === SORT_DESC ? -1 : 1; // Project and compare values $lhs = $projection ? call_user_func($projection, $first[$column]) : $first[$column]; $rhs = $projection ? call_user_func($projection, $second[$column]) : $second[$column]; // Determine the comparison result if ($lhs < $rhs) { return -1 * $sortOrder; } elseif ($lhs > $rhs) { return 1 * $sortOrder; } } // Tiebreakers exhausted return 0; }; }
Betrachten Sie das Beispiel Daten:
$data = array( array('zz', 'name' => 'Jack', 'number' => 22, 'birthday' => '12/03/1980'), array('xx', 'name' => 'Adam', 'number' => 16, 'birthday' => '01/12/1979'), array('aa', 'name' => 'Paul', 'number' => 16, 'birthday' => '03/11/1987'), array('cc', 'name' => 'Helen', 'number' => 44, 'birthday' => '24/06/1967'), );
Grundlegende Sortierung:
Sortieren mit mehreren Spalten:
Erweiterte Funktionen:
Komplexer Anwendungsfall:
Sortieren Sie absteigend nach der Spalte „Nummer“, gefolgt von voraussichtliche Spalte „Geburtstag“ aufsteigend:
usort($data, make_comparer( ['number', SORT_DESC], ['birthday', SORT_ASC, 'date_create'] ));
Das obige ist der detaillierte Inhalt vonWie sortiere ich ein mehrdimensionales PHP-Array effizient nach Spalten, einschließlich Datumsangaben und benutzerdefinierten Kriterien?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!