Ordinamento personalizzato con 'usort'
Fa parte della sezione Logica e flusso del percorso PHP di Coddy. Lezione 25 di 68.
Quando le funzioni di ordinamento integrate di PHP non soddisfano le tue esigenze specifiche, la funzione usort() offre la massima flessibilità consentendoti di definire esattamente come gli elementi devono essere confrontati e ordinati. Questa funzione accetta il tuo array e una funzione di confronto personalizzata che scrivi per determinare la logica di ordinamento.
La funzione di confronto riceve due elementi dell’array e deve restituire un numero intero: un numero negativo se il primo elemento deve precedere il secondo, zero se sono uguali oppure un numero positivo se il primo elemento deve seguire il secondo.
<?php
function compareByLength($a, $b) {
return strlen($a) - strlen($b);
}
$words = ["elephant", "cat", "butterfly", "dog"];
usort($words, "compareByLength");
print_r($words);
// Produce: Array ( [0] => cat [1] => dog [2] => elephant [3] => butterfly )
?>In questo esempio, la funzione di confronto calcola la differenza tra le lunghezze delle stringhe. Quando strlen($a) - strlen($b) restituisce un numero negativo, significa che la prima stringa è più corta e dovrebbe venire prima nell'array ordinato.
Come altre funzioni di ordinamento di PHP, usort() modifica direttamente l’array originale. Questa potente funzione apre la strada a possibilità di ordinamento basate su qualsiasi criterio ti venga in mente, che si tratti della lunghezza delle stringhe, di una logica aziendale personalizzata o di confronti complessi su più campi.
Sfida
FacileRiceverai un input: un array di prezzi di prodotti in formato JSON. Leggi l'input, converti la stringa JSON in un array, crea una funzione di confronto che ordini i prezzi in ordine crescente, usa usort() con la tua funzione di confronto per ordinare l'array e stampa l'array ordinato usando print_r().
Formato dell'input: Una riga contenente un array JSON di numeri (esempio: [29.99,15.50,42.00,8.75,33.25])
Output previsto: L'array ordinato in ordine crescente in base al prezzo, visualizzato usando print_r()
Provalo tu
<?php
// Leggi l'input
$input = fgets(STDIN);
$prices = json_decode($input, true);
// TODO: Crea una funzione di confronto e usa usort() per ordinare l'array
// Stampa l'array ordinato
print_r($prices);
?>Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Funzioni avanzate
Funzioni anonimeClosure e 'use'Funzioni frecciaFunzioni callbackUso di 'call_user_func'Funzioni variabiliPassaggio per riferimentoFunzioni ricorsiveRiepilogo: carrellata di funzioni4Array multidimensionali
Creare un array 2DAccedere agli elementi di un array 2DModificare gli elementi di un array 2DIterare con cicli annidatiArray associativi 2DRipasso: esercizio con una griglia semplice2Manipolazioni avanzate degli array
Aggiungere con 'array_push'Rimuovere con 'array_pop'Aggiungere con 'array_unshift'Rimuovere con 'array_shift'Unire array indicizzatiUnire array associativiEstrarre con 'array_slice'Valori con 'in_array'Chiavi con 'array_search'Riepilogo: esercizio playlist3Ordinare gli array
Ordina gli array indicizzati in ordine crescenteOrdina gli array indicizzati in ordine decrescenteOrdina gli array associativi per valoreOrdina gli array associativi per chiaveOrdinamento naturaleOrdinamento personalizzato con 'usort'Ripasso: ordinamento della classificaEsercitati da solo: Compilatore PHP online