natcasesort()
Guida completa alla funzione natcasesort() in PHP: ordinamento naturale senza distinzione tra maiuscole e minuscole, sintassi ed esempi pratici.
Introduzione
natcasesort() ordina un array usando un algoritmo di ordine naturale con un confronto senza distinzione tra maiuscole e minuscole. L'"ordine naturale" significa che le stringhe vengono ordinate come farebbe un essere umano — quindi img10 viene dopo img2, non prima come farebbe un semplice ordinamento alfabetico.
Questa pagina spiega cos'è l'ordinamento naturale, come natcasesort() differisce da natsort() e sort(), e le insidie relative alle chiavi e ai valori restituiti.
Sintassi
natcasesort(array &$array): boolPrende l'array per riferimento, lo ordina in loco e restituisce true in caso di successo. Non si assegna il risultato a una variabile — l'array passato viene modificato direttamente.
| Dettaglio | Comportamento |
|---|---|
| Ordina | In loco (per riferimento) |
| Chiavi | Preservate — le coppie chiave/valore rimangono collegate |
| Ordine | Crescente, naturale, senza distinzione tra maiuscole e minuscole |
| Restituisce | bool (true in caso di successo) |
Perché l'ordine naturale è importante
Un normale ordinamento alfabetico confronta le stringhe carattere per carattere, quindi "img10" viene prima di "img2" perché 1 è minore di 2. Questo è raramente ciò che ci si aspetta quando i nomi di file o le etichette contengono numeri. L'ordine naturale tratta le sequenze di cifre come numeri, producendo il risultato intuitivo per l'utente.
Esempio base
Output:
Array
(
[3] => Boston
[2] => Chicago
[1] => Los Angeles
[0] => New York
[4] => San Francisco
)Si noti che le chiavi (3, 2, 1, 0, 4) non vengono rinumerate — ogni valore mantiene la sua chiave originale. Se si desidera reimpostare le chiavi a 0, 1, 2…, usare sort() oppure passare il risultato attraverso array_values().
natcasesort() vs natsort() vs sort()
La differenza tra queste tre funzioni è più evidente con stringhe di caratteri misti che contengono numeri:
<?php
$files = array("IMG10.png", "img12.png", "img2.png", "IMG1.png", "img10.png");
$a = $files;
natcasesort($a); // natural + case-insensitive
print_r($a);Output:
Array
(
[3] => IMG1.png
[2] => img2.png
[0] => IMG10.png
[4] => img10.png
[1] => img12.png
)Con natsort() (con distinzione tra maiuscole e minuscole) gli stessi dati vengono ordinati diversamente, perché le lettere maiuscole hanno un valore di confronto inferiore a quelle minuscole — quindi IMG10 finisce prima di img2:
Array
(
[3] => IMG1.png
[0] => IMG10.png
[2] => img2.png
[4] => img10.png
[1] => img12.png
)E sort() (ordinamento normale, non naturale) reindicizza le chiavi e mette img10/img12 prima di img2:
Array
(
[0] => IMG1.png
[1] => IMG10.png
[2] => img10.png
[3] => img12.png
[4] => img2.png
)Usare natcasesort() quando l'ordine deve corrispondere all'intuizione umana e il caso non deve essere considerato — ad esempio per elencare nomi di file caricati dagli utenti in cui qualcuno potrebbe aver digitato IMG o img.
Insidie
- Restituisce un bool, non l'array ordinato.
$sorted = natcasesort($arr);imposta$sortedatrue, non ai propri dati. I dati si trovano in$arr. - Le chiavi vengono preservate. Questo rompe il codice che presuppone chiavi con base
0in seguito. Utilizzarearray_values($arr)se si ha bisogno di un elenco pulito. - I valori non stringa vengono confrontati come stringhe. Numeri, booleani, ecc. vengono convertiti in stringhe prima del confronto.
Funzioni correlate
natsort()— ordine naturale, con distinzione tra maiuscole e minuscole.sort()— ordinamento ascendente normale, reindicizza le chiavi.asort()— ordinamento ascendente che preserva le chiavi (non naturale).usort()— ordinamento con callback di confronto personalizzato.
Disponibile da PHP 4.0.0.