Aktueller Standort: Startseite> Neueste Artikel> Wie sortiere ich Dateinamen auf natürliche Weise mit strnatcasecmp in PHP?

Wie sortiere ich Dateinamen auf natürliche Weise mit strnatcasecmp in PHP?

gitbox 2025-05-20

In vielen Szenarien müssen wir nach Dateiname sortieren. Gemeinsame Sortiermethoden wie die Sortierung von Wörterbuch können zu unerwarteten Ergebnissen führen. Beispielsweise wird sortiert nach Dictionary, File2.txt wird vor File10.txt eingestuft, da "2" kleiner als "1" ist. Benutzer möchten jedoch normalerweise, dass die Dateinamen in numerischer Reihenfolge sortiert werden, d. H. File2.txt sollte nach File10.txt platziert werden, die als "natürliche Sortierung" bezeichnet wird.

Die STRNATCASECMP -Funktion in PHP ist so konzipiert, dass diese Anforderung erfüllt wird. Es kann zwei Saiten vergleichen und nach natürlichen Sortierregeln sortieren. StrnatCasecmp ist eine "Fall-unempfindliche" natürliche Sortiermethode, die für die Dateinamensortierung sehr geeignet ist.

Was ist natürliches Sortieren?

Die natürliche Sortierung basiert auf menschlicher intuitiver Sortierung. Beispielsweise sollte im Fall von Dateinamen Datei1 , Datei2 , Datei10 das Ergebnis der Sortierung in der Natur sein:

 file1
file2
file10

Anstelle von Wörterbuch -Sortierungsergebnissen:

 file1
file10
file2

Wie benutze ich Strnatcasecmp für die natürliche Sortierung?

StrnatCasecmp ist eine sehr nützliche Funktion in PHP, die zwei Zeichenfolgen vergleicht und sie nach natürlichen Sortierregeln vergleicht. Die Syntax dieser Funktion lautet wie folgt:

 int strnatcasecmp ( string $string1 , string $string2 )
  • $ string1 und $ string2 sind zwei Zeichenfolgen, die verglichen werden müssen.

  • Funktionsrückgabewert:

    • Wenn $ String1 weniger als $ String2 ist, wird eine negative Ganzzahl zurückgegeben.

    • Wenn $ String1 gleich $ String2 ist, return 0.

    • Wenn $ String1 größer als $ String2 ist, wird eine positive Ganzzahl zurückgegeben.

Durch diese Funktion können wir die natürliche Sortierung von Dateinamen problemlos implementieren. Hier ist ein Beispiel, das zeigt, wie Dateinamen mit StrnatCasecmp sortiert werden.

Beispielcode

Angenommen, wir haben den folgenden Dateinamen:

 $files = ['file10.txt', 'file2.txt', 'file1.txt', 'file20.txt', 'file11.txt'];

Wir möchten diese Dateinamen auf natürliche Weise sortieren, damit die Dateinamen in numerischer Reihenfolge angeordnet sind. Wir können Strnatcasecmp verwenden, um zu erreichen:

 <?php
$files = ['file10.txt', 'file2.txt', 'file1.txt', 'file20.txt', 'file11.txt'];

// verwenden usort Und strnatcasecmp Natürliche Sortierung machen
usort($files, 'strnatcasecmp');

// Ausgeben des sortierten Dateinamens
print_r($files);
?>

Code analysieren

  1. Wir definieren eine Reihe von Dateinamen $ Dateien .

  2. Verwenden Sie die Usort -Funktion, um das Array zu sortieren, das ein Array und eine Rückruffunktion als Parameter akzeptiert. Hier übergeben wir Strnatcasecmp als Rückruffunktion in Usort .

  3. Nach Abschluss der Sortierung werden die Dateinamen im $ -Fateien -Array gemäß den Regeln der natürlichen Sortierung angeordnet.

Ausgangsergebnis

 Array
(
    [0] => file1.txt
    [1] => file2.txt
    [2] => file10.txt
    [3] => file11.txt
    [4] => file20.txt
)

Wie Sie sehen können, sind die Dateinamen bereits in der Reihenfolge der Zahlen sortiert. Auf diese Weise wird Datei2.txt vor Datei10.txt eingestuft.

Der Unterschied zwischen strnatcasecmp und strnatcmp

STRNATCMP und STRNATCASECMP sind beide Funktionen, die in PHP für die natürliche Sortierung verwendet werden. Der Unterschied zwischen den beiden ist:

  • STRNATCMP ist fallempfindlich;

  • Strnatcasecmp ist unempfindlich.

Wenn Sie Fallunterschiede in Dateinamen ignorieren möchten, können Sie Strnatcasecmp verwenden. Andernfalls können Sie Strnatcmp verwenden.

Warum ist Strnatcasecmp besser als normale STRCMP ?

Bei der Sortierung mit gewöhnlichen String -Vergleichsfunktionen wie STRCMP können Sie Probleme wie "file2.txt" und "file10.txt" begegnen, und die Ergebnisse werden nicht in intuitiver numerischer Reihenfolge angeordnet. STRNATCASECMP kann sicherstellen, dass Zeichenfolgen in numerischer Reihenfolge verglichen werden, was eher den Erwartungen der Benutzer entspricht, insbesondere wenn es um Dateinamen, Versionsnummern usw. geht, die eine natürliche Sortierung erfordern.