Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

Wie man Arrays in PHP sortiert

by
Read Time:12 minsLanguages:

German (Deutsch) translation by Tatsiana Bochkareva (you can also view the original English article)

Es ist immer einfacher, eine bestimmte Information aus sortierten Daten abzurufen, andernfalls müssen Sie jedes Element des Arrays einzeln durchgehen. Angenommen, Sie haben die Punktzahl verschiedener Schüler in einer Klasse in einem Array oder einer Tabelle gespeichert. Wenn die Daten nicht nach den erzielten Punktzahlen sortiert sind, müssen Sie sich die Punktzahl jedes Schülers in der Klasse ansehen, bevor Sie feststellen können, wer die höchste und niedrigste Punktzahl erhalten hat. Wenn die Tabelle bereits auf der Grundlage der Punktzahl von niedrig nach hoch sortiert war, würde ein Blick auf die Punktzahl des ersten Schülers die niedrigste Note ergeben.

Durch das Sortieren sind viele Aufgaben, die den Zugriff auf oder das Abrufen eines bestimmten Datensatzes erfordern, sehr einfach und effizient. In diesem Tutorial erfahren Sie, wie Sie mithilfe der integrierten PHP-Funktionen verschiedene Arten von Arrays sortieren.

Sortieren eines Arrays nach Wert

Das Sortieren eines Arrays nach dem Wert seiner Elemente ist in PHP sehr einfach. Sie können festlegen, ob Schlüsselwertzuordnungen beibehalten oder verworfen werden sollen, und Sie können auch Ihre eigenen Funktionen definieren, um festzulegen, wie Elemente sortiert werden. Ich werde Ihnen in diesem Abschnitt des Tutorials zeigen, wie.

Mit der Funktion sort(&$array, $sort_flags) können Sie die Werte eines Arrays von niedrig nach hoch sortieren. Beim Sortieren des Arrays werden jedoch keine Schlüsselwertzuordnungen beibehalten. Anstelle einer einfachen Neuordnung werden sortierten Elementen neue Schlüssel zugewiesen. Mit dem optionalen zweiten Parameter können Sie festlegen, wie die Elemente sortiert werden sollen. Es kann sechs verschiedene Werte haben:

  1. SORT_REGULAR - Hiermit werden die Werte sortiert, ohne dass ihre Typen geändert werden.
  2. SORT_NUMERIC - Hiermit werden die Werte sortiert, indem sie numerisch verglichen werden.
  3. SORT_STRING - Hiermit werden die Werte sortiert, indem sie als Zeichenfolgen verglichen werden.
  4. SORT_LOCALE_STRING - Hiermit werden die Werte als Zeichenfolge basierend auf dem aktuellen Gebietsschema verglichen. Sie können das Gebietsschema selbst mit setlocale() aktualisieren.
  5. SORT_NATURAL - Hiermit werden die Elemente in "natürlicher Reihenfolge" sortiert, während sie als Zeichenfolgen verglichen werden.
  6. SORT_FLAG_CASE - Dies kann mit SORT_STRING oder SORT_NATURAL kombiniert werden, um die Groß- und Kleinschreibung beim Sortieren von Zeichenfolgen zu deaktivieren.

Im Folgenden finden Sie einige Sortierbeispiele, mit denen Sie den Unterschied zwischen allen Sortierflags schnell erkennen können.

Im Beispiel der regulären Sortierung werden die numerischen Zeichenfolgen in ihre numerischen Werte konvertiert und entsprechend sortiert. Die Zeichenfolge "Apple" ist nicht numerisch, bleibt also unberührt und wird als Zeichenfolge verglichen.

Im zweiten Beispiel, der numerischen Sortierung, möchten wir, dass die Daten nach dem numerischen Wert sortiert werden, damit "Apple" in den numerischen Wert 0 konvertiert wird und an erster Stelle steht. Die restlichen Werte werden wie erwartet sortiert.

Im dritten Beispiel werden alle Werte als Zeichenfolgen behandelt. Dies bedeutet, dass anstatt den numerischen Wert von 123 oder 3249832 mit 38 zu vergleichen, sie als Zeichenfolgen verglichen werden - jeweils ein Zeichen. Da "1" vor "3" steht, wird der Wert 123 als niedriger als 38 angesehen.

Wenn Sie Ihre Array-Werte von hoch nach niedrig anstatt von niedrig nach hoch sortieren möchten, können Sie dies mit Hilfe der Funktion rsort() tun. Es akzeptiert dieselben Parameter wie sort(), sortiert die Werte jedoch in umgekehrter Reihenfolge. Es werden auch keine Schlüsselwertzuordnungen beibehalten, sodass es keine gute Wahl zum Sortieren von assoziativen Arrays ist.

Sortieren Sie ein assoziatives Array

Schlüsselwertzuordnungen werden wichtig, wenn Sie mit assoziativen Arrays arbeiten. Betrachten Sie das folgende Beispiel, in dem ein assoziatives Array verwendet wird, um den Namen verschiedener Personen und ihre Lieblingsfrucht zu speichern. Wenn Sie die Liste alphabetisch nach dem Namen der Früchte sortieren möchten, führt die Verwendung der Funktion sort() aus dem vorherigen Abschnitt zum Verlust der zugehörigen Schlüssel.

Wie Sie sehen, haben wir nicht nur die Assoziation der Menschen mit ihren Lieblingsfrüchten verloren, sondern auch die Namen der verschiedenen Menschen. Jedem sortierten Wert wurde basierend auf seiner Position im sortierten Array ein neuer numerischer Index zugewiesen.

Um Ihnen bei der einfachen Lösung dieses Problems zu helfen, verfügt PHP über zwei verschiedene Funktionen, die die Schlüsselwertzuordnung beibehalten und Arrays nach ihren Werten sortieren. Diese beiden Funktionen sind asort() und arsort(). Das folgende Code-Snippet sortiert dasselbe Array $fruit_preferences, verwendet jedoch asort(), um dies zu tun.

Wie aus dem obigen Beispiel hervorgeht, bewegt sich der Wert von Apple an die Spitze, während die Verbindung zu Patricia erhalten bleibt. Die Fruchtnamen können mit der Funktion arsort() genauso einfach umgekehrt sortiert werden.

Beide Funktionen akzeptieren dieselben Sortierflags wie der Wert ihres optionalen zweiten Parameters als sort() und rsort().

Sortieren von Array-Elementen nach Wert mit benutzerdefinierten Funktionen

Die vier Sortierfunktionen können Ihre allgemeinen Sortieranforderungen mithilfe verschiedener Flags problemlos erfüllen. Manchmal können Ihre Kriterien für den Vergleich der Array-Elemente jedoch unterschiedlich sein.

Nehmen wir an, Sie haben eine Reihe von zufälligen Wörtern, die alphabetisch sortiert werden müssen. Sie möchten sie jedoch auch nach ihrer Länge sortieren, bevor Sie sie alphabetisch sortieren. Zum Beispiel würde der Zoo nach der Apfel in traditioneller alphabetischer Sortierung kommen. Wenn Sie die kurzen Wörter vor den längeren anzeigen möchten, wird der Zoo vor dem Apfel angezeigt. In den gleichen Buchstaben würde der Affe aufgrund der alphabetischen Reihenfolge vor den Zoo kommen.

Grundsätzlich werden die Wörter zuerst nach ihrer Länge sortiert und dann werden die Wörter mit der gleichen Anzahl von Buchstaben innerhalb ihrer eigenen Gruppe alphabetisch sortiert. Diese Art der Sortierung ist nicht in PHP integriert, daher müssen wir unsere eigene Sortierfunktion schreiben.

In diesem Fall bietet PHP einige Funktionen, mit denen Sie das zu sortierende Array zusammen mit dem Namen Ihrer eigenen Sortierfunktion übergeben können.

Mit der Funktion usort() können Sie Array-Werte in regulären Arrays sortieren. In ähnlicher Weise können Sie die Funktion uasort() verwenden, um Werte in assoziativen Arrays zu sortieren und gleichzeitig Schlüsselwertzuordnungen beizubehalten.

Das folgende Codefragment zeigt eine Möglichkeit, dieses Verhalten zu erreichen.

In den Rückruffunktionen für die benutzerdefinierte Sortierung müssen wir eine Ganzzahl kleiner als 0 zurückgeben, um anzuzeigen, dass der erste Wert kleiner als der zweite ist. Geben Sie 0 zurück, wenn der erste Wert dem zweiten entspricht. Geben Sie eine Ganzzahl größer als 0 zurück, wenn der erste Wert größer als der zweite ist.

Da unser primäres Sortierkriterium die Zeichenfolgenlänge war, geben wir direkt -1 zurück, wenn das erste Wort kürzer als das zweite ist. Ebenso geben wir direkt 1 zurück, wenn das erste Wort länger als das zweite ist. Wenn die beiden Wörter gleich lang sind, vergleichen wir sie alphabetisch mit der Funktion strcmp() und geben ihren Wert zurück.

Wie Sie in der Ausgabe sehen können, ordnet unsere benutzerdefinierte Sortierfunktion die Wörter genau so neu, wie wir es wollten.

Sortieren eines Arrays nach Schlüssel

Das Sortieren eines Arrays anhand seiner Schlüssel ist im Allgemeinen nützlich, wenn Sie mit assoziativen Arrays arbeiten. Beispielsweise verfügen Sie möglicherweise über ein Array mit Informationen zur Gesamtzahl der Flughäfen in verschiedenen Ländern. Angenommen, die Namen verschiedener Länder sind Schlüssel und die Anzahl der Flughäfen sind Werte, möchten Sie die Ländernamen möglicherweise alphabetisch sortieren. Dies ist mit den Funktionen ksort() und krsort() sehr einfach. Beide Funktionen behalten die Schlüssel-Wert-Zuordnung von Array-Elementen nach dem Sortieren bei. Die Funktion ksort() sortiert die Tasten von niedrig nach hoch und krsort() sortiert die Tasten von hoch nach niedrig.

Hier ist ein grundlegendes Sortierbeispiel:

Sie können PHP auch ohne Ihre eigene benutzerdefinierte Funktion zum Sortieren von Array-Schlüsseln mit der Funktion uksort() bereitstellen. Genau wie bei usort() müssen Sie bei der Rückruffunktion in uksort() auch eine Ganzzahl kleiner als 0 zurückgeben, wenn der erste Schlüssel als kleiner als der zweite betrachtet wird, und eine Ganzzahl größer als 0, wenn der erste Schlüssel größer als der zweite ist. Diese Funktion verwaltet auch die Schlüsselwertzuordnung von Array-Elementen.

Im obigen Beispiel haben wir die benutzerdefinierte Sortierfunktion aus dem vorherigen Abschnitt verwendet, um den Namen von Ländern zuerst nach der Länge ihres Namens und dann alphabetisch zu sortieren.

Sortieren mehrdimensionaler Arrays in PHP

Im wirklichen Leben ist es viel üblicher, mit mehrdimensionalen Informationen umzugehen. Beispielsweise speichern die Institutionen die Noten aller Schüler in einer Vielzahl von Fächern in einer einzigen Tabelle, anstatt für jedes Fach neue Tabellen zu erstellen. Wenn Sie dieselben Informationen in PHP speichern müssen, würden Sie es auch vorziehen, ein mehrdimensionales Array anstelle eines separaten Arrays für jedes Thema zu verwenden.

In diesem Tutorial erfahren Sie, wie Sie ein mehrdimensionales Array anhand einer Liste der höchsten Gebäude der Welt sortieren. Unser Array enthält Informationen über den Namen des Gebäudes, die Stadt und das Land, in dem es sich befindet, die Anzahl der Stockwerke und die Gesamthöhe in Metern sowie das Jahr, in dem es gebaut wurde.

Wenn Sie die Werte in einem mehrdimensionalen Array basierend auf einem bestimmten Feld sortieren möchten, können Sie einfach die Funktion usort() verwenden. Das folgende Beispiel soll Ihnen helfen, diese Technik besser zu verstehen.

Im obigen Beispiel werden die Informationen zu jedem Gebäude in einem eigenen Array im Hauptarray $tallest_buildings gespeichert. Die Funktion storey_sort() subtrahiert einfach die Anzahl der Stockwerke im zweiten Gebäude vom ersten, um zu bestimmen, welches Gebäude nach unseren Kriterien kleiner ist. Wir müssen uns keine Sorgen machen, einen bestimmten negativen oder positiven Wert zurückzugeben, da alle negativen Werte kleiner und alle positiven Werte größer bedeuten.

Am Ende durchlaufen wir einfach das Hauptarray und drucken Informationen zu jedem Gebäude aus.

Abschließende Gedanken

In diesem Tutorial habe ich Ihnen einige verschiedene Funktionen in PHP gezeigt, mit denen Arrays entweder nach ihren Schlüsseln oder nach ihren Werten sortiert werden können. Wir haben auch gelernt, wie ein Array anhand seiner Schlüssel oder Werte mithilfe unserer eigenen benutzerdefinierten Sortierkriterien mithilfe der Funktionen uksrot() und uasort() sortiert wird. Im letzten Abschnitt wurde erläutert, wie alle Werte in einem mehrdimensionalen Array nur anhand eines bestimmten Felds sortiert werden.

Ich hoffe, Sie haben aus diesem Tutorial etwas Neues gelernt. Wenn Sie Fragen oder Anregungen haben, lassen Sie es mich bitte in den Kommentaren wissen. Am besten lernen Sie, indem Sie versuchen, eigene Beispiele zu erstellen und Arrays mithilfe dieser Funktionen zu sortieren.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.