W3docs

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): bool

Die 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.

DetailVerhalten
SortiertIn-place (per Referenz)
SchlüsselErhalten — Schlüssel/Wert-Paare bleiben verknüpft
ReihenfolgeAufsteigend, natürlich, Groß-/Kleinschreibung-unabhängig
Gibt zurückbool (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

php— editable, runs on the server

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 $sorted auf true, 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 Sie array_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.

Übung

Übung
Was ist die Funktion von 'natcasesort()' in PHP?
Was ist die Funktion von 'natcasesort()' in PHP?
Was this page helpful?