Heim > Backend-Entwicklung > PHP-Tutorial > Wie kann ich mehrdimensionale Arrays in PHP effizient sortieren?

Wie kann ich mehrdimensionale Arrays in PHP effizient sortieren?

Mary-Kate Olsen
Freigeben: 2024-12-22 02:30:17
Original
818 Leute haben es durchsucht

How Can I Efficiently Sort Multidimensional Arrays in PHP?

Sortieren mehrdimensionaler Arrays in PHP: Eine vielseitige Lösung

Dieser umfassende Leitfaden befasst sich mit der Aufgabe, mehrdimensionale Arrays in PHP zu sortieren. Es bietet eine wiederverwendbare und hochgradig anpassbare Lösung, mit der Sie Ihre Daten mühelos sortieren können.

Die Lösung: Funktion make_comparer()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

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) {

            // Determine sort criteria

            list($column, $sortOrder, $projection) = $criterion;

            $sortOrder = $sortOrder === SORT_DESC ? -1 : 1;

 

            // Project values if necessary

            if ($projection) {

                $lhs = call_user_func($projection, $first[$column]);

                $rhs = call_user_func($projection, $second[$column]);

            } else {

                $lhs = $first[$column];

                $rhs = $second[$column];

            }

 

            // Compare values; do not return if equal

            if ($lhs < $rhs) {

                return -1 * $sortOrder;

            } elseif ($lhs > $rhs) {

                return 1 * $sortOrder;

            }

        }

 

        return 0; // tiebreakers exhausted, so $first == $second

    };

}

Nach dem Login kopieren

Verwendung

Grundlegende Verwendung: Sortieren nach einer einzelnen Spalte

1

2

3

4

5

6

7

8

// Sort $data by the "name" column using uasort

$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'),

);

uasort($data, make_comparer('name'));

Nach dem Login kopieren

Sortieren nach mehreren Spalten:

1

2

// Sort $data by "number" and then by the zero-indexed column (ID)

uasort($data, make_comparer('number', 0));

Nach dem Login kopieren

Erweiterte Funktionen

Umgekehrte Sortierung:

1

2

// Sort $data by "name" descending

uasort($data, make_comparer(['name', SORT_DESC]));

Nach dem Login kopieren

Benutzerdefinierte Projektionen:

1

2

// Sort $data by "birthday" using date_create as a projection

uasort($data, make_comparer(['birthday', SORT_ASC, 'date_create']));

Nach dem Login kopieren

Kombinierende Funktionen:

1

2

3

4

5

// Sort $data by "number" descending and then by "birthday" ascending

uasort($data, make_comparer(

    ['number', SORT_DESC],

    ['birthday', SORT_ASC, 'date_create']

));

Nach dem Login kopieren

Fazit

Diese Lösung bietet eine breite Palette an Funktionen Sortieren Sie mehrdimensionale Arrays in PHP. Seine Flexibilität und Benutzerfreundlichkeit machen es zu einem leistungsstarken Werkzeug für die Datenbearbeitung in verschiedenen Szenarien.

Das obige ist der detaillierte Inhalt vonWie kann ich mehrdimensionale Arrays in PHP effizient sortieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage