Aktueller Standort: Startseite> Neueste Artikel> Wie format man in einem Array in Kombination mit Strnatcasecmp und Array_Map einheitlich formatiert?

Wie format man in einem Array in Kombination mit Strnatcasecmp und Array_Map einheitlich formatiert?

gitbox 2025-05-27

Bei der täglichen PHP -Programmierung müssen wir häufig String -Arrays sortieren, aber das Standard -Wörterbuchsortieren ( sortieren , usort usw.) verarbeitet Strings nicht mit Zahlen. Wenn beispielsweise Dateinamen wie Img1.png , IMG2.Png , Img10.png mit gewöhnlichen Zeichenfolgen verglichen werden, wird das Sortierergebnis img1.png , img10.png , img2.png sein, was offensichtlich nicht den menschlichen natürlichen Sortier -Habits entspricht.

Um "natürliches Sortieren" zu erreichen, liefert PHP STRNATCMP- und STRNATCASTECMP -Funktionen, die der Fall-sensitiven bzw. Fall-unempfindlichen natürlichen Sortierung entsprechen.
Wenn wir das Array sortieren, müssen wir häufig jedes Element im Array einheitlich formatieren, z. Zu diesem Zeitpunkt können wir Array_Map verwenden, um dies zu erreichen.

In diesem Artikel wird vorgestellt, wie man diese beiden Werkzeuge kombiniert, die Saiten im Array gleichmäßig formatiert und sie dann auf natürliche Weise sortiert.

Kernschritte

1 ?? Datenarray vorbereiten <br> Nehmen wir eine Reihe von Dateinamen als Beispiel:

 $files = ['Img10.png', 'img2.png', 'IMG1.png', 'img20.png', 'img11.png'];

2 ?? Formatelemente mit Array_Map <br> Angenommen, wir wollen sie alle in Kleinbuchstaben umwandeln:

 $formattedFiles = array_map('strtolower', $files);

Wenn Sie sich mit komplexeren Dingen (z. B. De-Space und einheitlichen Erweiterungen) befassen möchten, können Sie anonyme Funktionen schreiben:

 $formattedFiles = array_map(function($item) {
    return strtolower(trim($item));
}, $files);

3 ?? Benutzerdefinierte Sortierfunktion
Usort von PHP ermöglicht es uns, mit benutzerdefinierten Funktionen zu sortieren:

 usort($formattedFiles, 'strnatcasecmp');

HINWEIS: STRNATCASECMP ist eine Vergleichsfunktion, keine Funktion, die direkt zum Sortieren verwendet wird.

Vollständiger Beispielcode

 <?php
$files = ['Img10.png', 'img2.png', 'IMG1.png', 'img20.png', 'img11.png'];

// Erster Schritt:Einheitliches Format(Kleinbuchstaben drehen + Räume entfernen)
$formattedFiles = array_map(function($item) {
    return strtolower(trim($item));
}, $files);

// Schritt 2:Natürliche Sortierung(Fall unempfindlich)
usort($formattedFiles, 'strnatcasecmp');

// Ausgangsergebnis
foreach ($formattedFiles as $file) {
    echo $file . "\n";
}
?>

Auslaufergebnisse:

 img1.png
img2.png
img10.png
img11.png
img20.png

Weitere praktisches Beispiel: Situation mit URL

Angenommen, wir haben es mit einer Reihe von URLs zu tun:

 $urls = [
    'https://gitbox.net/File10.html',
    'https://gitbox.net/file2.html',
    'https://gitbox.net/FILE1.html',
    'https://gitbox.net/file20.html',
    'https://gitbox.net/file11.html',
];

Wir möchten nach dem Dateinamen Teil sortieren. Wir können zuerst den Dateinamen extrahieren und dann sortieren:

 <?php
$urls = [
    'https://gitbox.net/File10.html',
    'https://gitbox.net/file2.html',
    'https://gitbox.net/FILE1.html',
    'https://gitbox.net/file20.html',
    'https://gitbox.net/file11.html',
];

// Extrahieren Sie den Dateinamen -Teil und binden Sie es an an URL
$mapped = array_map(function($url) {
    $parts = parse_url($url);
    $file = basename($parts['path']);
    return ['url' => $url, 'file' => strtolower($file)];
}, $urls);

// 按文件名Natürliche Sortierung
usort($mapped, function($a, $b) {
    return strnatcasecmp($a['file'], $b['file']);
});

// Ausgabe sortiert URL
foreach ($mapped as $item) {
    echo $item['url'] . "\n";
}
?>

Ausgabe:

 https://gitbox.net/FILE1.html
https://gitbox.net/file2.html
https://gitbox.net/File10.html
https://gitbox.net/file11.html
https://gitbox.net/file20.html