W3docs

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

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

DettaglioComportamento
OrdinaIn loco (per riferimento)
ChiaviPreservate — le coppie chiave/valore rimangono collegate
OrdineCrescente, naturale, senza distinzione tra maiuscole e minuscole
Restituiscebool (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

php— editable, runs on the server

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 $sorted a true, non ai propri dati. I dati si trovano in $arr.
  • Le chiavi vengono preservate. Questo rompe il codice che presuppone chiavi con base 0 in seguito. Utilizzare array_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.

Esercizio

Pratica
Qual è la funzione di 'natcasesort()' in PHP?
Qual è la funzione di 'natcasesort()' in PHP?
Was this page helpful?