natcasesort()
Umfassender Leitfaden zur natcasesort()-Funktion in PHP: natürliche, Groß-/Kleinschreibung-unabhängige Sortierung von Arrays erklärt.
Einführung
natcasesort() sortiert ein Array mithilfe eines natürlichen Sortieralgorithmus mit einem Groß-/Kleinschreibung-unabhängigen Vergleich. „Natürliche Reihenfolge" bedeutet, dass Zeichenketten so geordnet werden, wie ein Mensch es erwarten würde — img10 kommt also nach img2, nicht davor, wie es eine einfache alphabetische Sortierung tun würde.
Diese Seite erklärt, was natürliche Sortierung ist, wie sich natcasesort() von natsort() und sort() unterscheidet und welche Fallstricke es bei Schlüsseln und Rückgabewerten gibt.
Syntax
natcasesort(array &$array): boolDie Funktion nimmt das Array per Referenz entgegen, sortiert es direkt und gibt bei Erfolg true zurück. Das Ergebnis muss nicht zurückgegeben werden — das übergebene Array wird direkt verändert.
| Detail | Verhalten |
|---|---|
| Sortiert | In-place (per Referenz) |
| Schlüssel | Erhalten — Schlüssel/Wert-Paare bleiben verknüpft |
| Reihenfolge | Aufsteigend, natürlich, Groß-/Kleinschreibung-unabhängig |
| Gibt zurück | bool (true bei Erfolg) |
Warum natürliche Reihenfolge wichtig ist
Eine reguläre alphabetische Sortierung vergleicht Zeichenketten Zeichen für Zeichen, sodass "img10" vor "img2" sortiert wird, weil 1 kleiner als 2 ist. Das entspricht selten den Erwartungen eines Menschen, wenn Dateinamen oder Bezeichnungen Zahlen enthalten. Die natürliche Reihenfolge behandelt Ziffernfolgen als Zahlen und liefert so das intuitiv erwartete Ergebnis.
Grundlegendes Beispiel
Ausgabe:
Array
(
[3] => Boston
[2] => Chicago
[1] => Los Angeles
[0] => New York
[4] => San Francisco
)Beachten Sie, dass die Schlüssel (3, 2, 1, 0, 4) nicht neu nummeriert werden — jeder Wert behält seinen ursprünglichen Schlüssel. Wenn Sie Schlüssel zurück auf 0, 1, 2… setzen möchten, verwenden Sie stattdessen sort() oder übergeben Sie das Ergebnis an array_values().
natcasesort() vs. natsort() vs. sort()
Der Unterschied zwischen diesen drei Funktionen ist am deutlichsten bei gemischt-groß geschriebenen Zeichenketten mit Zahlen zu sehen:
<?php
$files = array("IMG10.png", "img12.png", "img2.png", "IMG1.png", "img10.png");
$a = $files;
natcasesort($a); // natural + case-insensitive
print_r($a);Ausgabe:
Array
(
[3] => IMG1.png
[2] => img2.png
[0] => IMG10.png
[4] => img10.png
[1] => img12.png
)Mit natsort() (Groß-/Kleinschreibung-sensitiv) werden dieselben Daten anders sortiert, da Großbuchstaben kleiner als Kleinbuchstaben verglichen werden — IMG10 landet daher vor img2:
Array
(
[3] => IMG1.png
[0] => IMG10.png
[2] => img2.png
[4] => img10.png
[1] => img12.png
)Und sort() (regulär, nicht natürlich) indiziert die Schlüssel neu und setzt img10/img12 vor img2:
Array
(
[0] => IMG1.png
[1] => IMG10.png
[2] => img10.png
[3] => img12.png
[4] => img2.png
)Verwenden Sie natcasesort(), wenn die Reihenfolge der menschlichen Erwartung entsprechen soll und Groß-/Kleinschreibung ignoriert werden soll — zum Beispiel beim Auflisten von benutzerdefinierten Dateinamen, bei denen jemand IMG oder img geschrieben haben könnte.
Fallstricke
- Die Funktion gibt einen bool zurück, nicht das sortierte Array.
$sorted = natcasesort($arr);setzt$sortedauftrue, nicht auf Ihre Daten. Die Daten befinden sich in$arr. - Schlüssel werden beibehalten. Das bricht Code, der anschließend
0-basierte Schlüssel erwartet. Verwenden Siearray_values($arr), wenn Sie eine saubere Liste benötigen. - Nicht-string-Werte werden als Zeichenketten verglichen. Zahlen, boolesche Werte usw. werden vor dem Vergleich in Zeichenketten umgewandelt.
Verwandte Funktionen
natsort()— natürliche Reihenfolge, Groß-/Kleinschreibung-sensitiv.sort()— reguläre aufsteigende Sortierung, indiziert Schlüssel neu.asort()— aufsteigende Sortierung mit Schlüsselerhaltung (nicht natürlich).usort()— Sortierung mit eigenem Vergleichs-Callback.
Verfügbar seit PHP 4.0.0.