W3docs

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
ParametroDescrizione
$arrayL'array di input da cui selezionare. Non deve essere vuoto.
$numQuante 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 — un int per un array numerico o una string per una chiave stringa.
  • Quando $num è 2 o 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:

php— editable, runs on the server

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 un ValueError (PHP 8+) o emette un avviso e restituisce null nelle versioni precedenti. Controlla prima l'array.
  • $num fuori intervallo. Richiedere più elementi di quanti ne contenga l'array genera un ValueError.
  • 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. Usa random_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() e mt_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.

Esercizio

Pratica
Qual è lo scopo della funzione array_rand() in PHP?
Qual è lo scopo della funzione array_rand() in PHP?
Was this page helpful?