W3docs

Padroneggiare arsort() in PHP: Ordinare gli Array in Ordine Decrescente per Valore

Scopri come usare arsort() in PHP per ordinare array associativi in ordine decrescente per valore mantenendo le associazioni chiave-valore, con esempi.

arsort() ordina un array associativo in ordine decrescente per valore mantenendo ogni valore legato alla propria chiave originale. La "a" sta per associativo (le associazioni chiave-valore sono preservate) e la "r" sta per reverse (il valore più grande prima). Questa pagina illustra la sintassi, i flag di ordinamento opzionali, esempi eseguibili e le differenze tra arsort() e le altre funzioni di ordinamento di PHP.

Usa arsort() ogni volta che le chiavi hanno un significato che non puoi perdere — una mappa di nomi di prodotti con i relativi prezzi, nomi utente con i punteggi, o categorie con i conteggi — e vuoi i valori più alti in cima.

Sintassi

arsort(array &$array, int $flags = SORT_REGULAR): true
  • $array — l'array da ordinare. Viene passato per riferimento, quindi arsort() riorganizza l'array sul posto anziché restituirne uno nuovo. La funzione stessa restituisce true.
  • $flags — opzionale. Controlla come vengono confrontati i valori. Il valore predefinito è SORT_REGULAR.

Flag di ordinamento

L'argomento $flags modifica il modo in cui due valori vengono confrontati:

  • SORT_REGULAR — confronta gli elementi normalmente, senza modificarne i tipi (impostazione predefinita).
  • SORT_NUMERIC — confronta gli elementi come numeri.
  • SORT_STRING — confronta gli elementi come string.
  • SORT_NATURAL — confronta le string usando un algoritmo di "ordine naturale" (così "img10" viene dopo "img2").
  • SORT_FLAG_CASE — da combinare con SORT_STRING o SORT_NATURAL usando | per rendere il confronto tra string insensibile alle maiuscole.

Scegliere il flag corretto è importante: con il valore predefinito SORT_REGULAR, le string numeriche "10" e "9" vengono confrontate numericamente, ma in un array misto i risultati possono essere sorprendenti. Usa esplicitamente SORT_NUMERIC o SORT_STRING quando i tipi di valore sono noti.

Ordinamento di un array associativo

php— editable, runs on the server

Questo codice produrrà:

orange - 3
apple - 2
banana - 1

I valori sono ora ordinati dal più grande al più piccolo e, aspetto fondamentale, ogni nome di frutto è ancora associato al proprio conteggio — arsort() ha preservato il legame chiave/valore. Questo è esattamente ciò che lo rende adatto per cose come classifiche o listini prezzi.

Ordinamento con un flag

php— editable, runs on the server

Questo codice produrrà:

1 - 5
4 - 4
0 - 3
2 - 2
3 - 1

L'array $numbers è ordinato in ordine decrescente per valore usando SORT_NUMERIC. Nota come le chiavi numeriche originali si spostino insieme ai loro valori invece di essere reindicizzate come 0, 1, 2…. Se non hai bisogno di preservare quelle chiavi, usa rsort(), che rinumera l'array.

arsort() vs. le altre funzioni di ordinamento

Le funzioni di ordinamento di array in PHP formano una famiglia coerente. Sapere quale usare dipende da due domande: ordinare per valore o per chiave? e preservare le chiavi o no?

FunzioneOrdina perOrdineMantiene l'associazione delle chiavi
asort()valorecrescente
arsort()valoredecrescente
sort()valorecrescenteno (reindicizzato)
rsort()valoredecrescenteno (reindicizzato)
ksort()chiavecrescente
krsort()chiavedecrescente

Quindi arsort() è il membro "decrescente, per valore, mantieni le chiavi" della famiglia — è il riflesso speculare di asort().

Insidie comuni

  • Restituisce true, non l'array ordinato. Scrivere $sorted = arsort($array); imposta $sorted a true. L'ordinamento avviene sull'$array originale sul posto.
  • Le chiavi numeriche non vengono reindicizzate. Questo è proprio il punto di forza di arsort(). Se vuoi una sequenza pulita 0, 1, 2… dopo l'ordinamento, usa rsort().
  • Il confronto di tipi misti può dare un ordine inatteso con SORT_REGULAR. Passa un flag esplicito quando il tuo array mescola string e numeri.
  • Per logiche di confronto personalizzate (ordinamento di object, o per una chiave calcolata) usa uasort(), che ti consente di fornire la tua callback di confronto preservando le chiavi.

Conclusione

arsort() ordina un array in ordine decrescente per valore mantenendo ogni chiave legata al proprio valore, rendendola ideale per dati classificati con etichette significative come punteggi o prezzi. Ricorda che ordina sul posto e restituisce true, e scegli un flag di ordinamento adatto ai tuoi tipi di dati. Quando hai bisogno di una combinazione diversa di ordine, chiave vs. valore, o preservazione delle chiavi, le funzioni correlate nella tabella sopra coprono ogni caso.

Esercizio

Pratica
Qual è la funzionalità della funzione arsort() in PHP?
Qual è la funzionalità della funzione arsort() in PHP?
Was this page helpful?