Funzione PHP: array_rand
La funzione PHP array_rand seleziona chiavi casuali da un array. Accetta un array come argomento e restituisce una o più chiavi.
La funzione PHP array_rand() seleziona una o più chiavi a caso da un array. Non restituisce i valori stessi — restituisce le chiavi, che si usano poi per leggere gli elementi corrispondenti. Questa piccola distinzione è la fonte di confusione più comune con la funzione, quindi vale la pena tenerla a mente durante tutta questa pagina.
array_rand() è lo strumento giusto quando si ha bisogno di selezionare un elemento casuale da un elenco (una citazione casuale, un banner casuale, una domanda casuale) oppure di estrarre un sottoinsieme casuale da un array più grande senza modificare o riordinare l'originale.
Sintassi
array_rand(array $array, int $num = 1): int|string|array| Parametro | Descrizione |
|---|---|
$array | L'array di input da cui selezionare. Non deve essere vuoto. |
$num | Quante chiavi restituire. Opzionale, valore predefinito 1. Deve essere compreso tra 1 e la lunghezza dell'array. |
Il tipo restituito dipende da $num:
- Quando
$numè1(o omesso), restituisce una chiave singola — unintper un array numerico o unastringper una chiave stringa. - Quando
$numè2o superiore, restituisce un array di chiavi.
Selezionare un singolo elemento
L'utilizzo più comune è ottenere un valore casuale. Si chiama array_rand() per ottenere una chiave, poi si usa quella chiave per accedere all'array:
array_rand($colors) restituisce una singola chiave casuale (in questo caso un indice intero), che viene usata per leggere il colore corrispondente. I due passaggi vengono spesso combinati in una sola riga: $colors[array_rand($colors)].
Selezionare più elementi
Passa un secondo argomento per ottenere più chiavi. Il risultato è un array di chiavi, e le chiavi vengono restituite nello stesso ordine in cui compaiono nell'array originale — solo quali chiavi vengono scelte è casuale, non il loro ordine:
<?php
$colors = ["red", "green", "blue", "yellow", "orange"];
$keys = array_rand($colors, 2); // e.g. [1, 4]
foreach ($keys as $key) {
echo $colors[$key] . "\n";
}
?>Poiché array_rand() restituisce chiavi e non valori, il modo tipico per ricavare i valori è array_map:
<?php
$colors = ["red", "green", "blue", "yellow", "orange"];
$picked = array_map(fn($k) => $colors[$k], (array) array_rand($colors, 2));
print_r($picked);
?>Valore restituito e chiavi stringa
Un equivoco frequente è che array_rand() restituisca sempre interi. Non è così — restituisce qualunque chiave abbia selezionato, preservandone il tipo originale. Per un array associativo ciò significa chiavi stringa:
<?php
$fruit = ["a" => "apple", "b" => "banana", "c" => "cherry"];
$key = array_rand($fruit);
echo $key; // e.g. "b" (a string key)
echo "\n";
echo $fruit[$key]; // e.g. "banana"
?>Errori comuni
- Restituisce chiavi, non valori.
array_rand($arr)fornisce una chiave; occorre comunque$arr[$key]per ottenere il valore. - Array vuoto. Chiamare
array_rand()su un array vuoto lancia unValueError(PHP 8+) o emette un avviso e restituiscenullnelle versioni precedenti. Controlla prima l'array. $numfuori intervallo. Richiedere più elementi di quanti ne contenga l'array genera unValueError.- Non è crittograficamente sicuro.
array_rand()va bene per mischiare banner o campionare dati, ma non usarlo mai per selezionare token di sessione, password o qualsiasi cosa legata alla sicurezza. Usarandom_int()con un CSPRNG per quello scopo.
Funzioni correlate
shuffle()— riordina casualmente tutti gli elementi di un array sul posto.str_shuffle()— mescola casualmente i caratteri di una string.rand()emt_rand()— generano un intero casuale in un intervallo.array_slice()— estrae una porzione contigua di un array.
Conclusione
array_rand() è un modo compatto per selezionare chiavi casuali da un array — una sola quando si omette $num, un array di esse quando si passa un conteggio. Ricorda che restituisce chiavi (preservandone il tipo originale, intero o stringa), che le chiavi scelte mantengono l'ordine originale dell'array e che non è adatto per la generazione di valori casuali legati alla sicurezza.