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, quindiarsort()riorganizza l'array sul posto anziché restituirne uno nuovo. La funzione stessa restituiscetrue.$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 conSORT_STRINGoSORT_NATURALusando|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
Questo codice produrrà:
orange - 3
apple - 2
banana - 1I 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
Questo codice produrrà:
1 - 5
4 - 4
0 - 3
2 - 2
3 - 1L'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?
| Funzione | Ordina per | Ordine | Mantiene l'associazione delle chiavi |
|---|---|---|---|
asort() | valore | crescente | sì |
arsort() | valore | decrescente | sì |
sort() | valore | crescente | no (reindicizzato) |
rsort() | valore | decrescente | no (reindicizzato) |
ksort() | chiave | crescente | sì |
krsort() | chiave | decrescente | sì |
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$sortedatrue. L'ordinamento avviene sull'$arrayoriginale sul posto. - Le chiavi numeriche non vengono reindicizzate. Questo è proprio il punto di forza di
arsort(). Se vuoi una sequenza pulita0, 1, 2…dopo l'ordinamento, usarsort(). - 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.