Menu
Coddy logo textTech

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.

challenge icon

Sfida

Facile

Riceverai 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);
?>
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore PHP online