Per ordinare record secondo un campo numerico, usa un comparatore. Nell’esempio ogni elemento deve avere pos intero: valida prima eventuali dati esterni.
$tracks = [
['pos' => 4, 'file' => 'quattro.mp3'],
['pos' => 1, 'file' => 'uno.mp3'],
['pos' => 3, 'file' => 'tre.mp3'],
];
usort($tracks, static fn(array $a, array $b): int => $a['pos'] <=> $b['pos']);L’array viene modificato direttamente e le chiavi numeriche sono ricreate da zero. Se vuoi mantenere le associazioni chiave-valore usa uasort con lo stesso comparatore. Non usare strtolower su valori numerici: è una trasformazione di stringhe, non un criterio di ordinamento numerico.
Per ordine decrescente inverti a e b. Per più criteri confronta il primo campo e usa il secondo soltanto quando il confronto restituisce zero. In PHP 8 gli elementi equivalenti mantengono l’ordine relativo precedente.
Eseguire l’esempio
Metti il codice in ordina.php preceduto da <?php, aggiungi la riga seguente ed esegui php ordina.php con PHP 8:
echo implode(', ', array_column($tracks, 'pos')), PHP_EOL;Devi leggere 1, 3, 4. Se un record manca di pos, correggi o rifiuta quel dato prima di ordinare: il comparatore presuppone la stessa struttura per tutti gli elementi.