str_shuffle()
Guida alla funzione PHP str_shuffle(), che permette di mescolare casualmente i caratteri di una stringa. Sintassi, esempi e avvertenze.
La funzione PHP str_shuffle() riordina casualmente i caratteri di una stringa e restituisce il risultato come nuova stringa. Ogni carattere dell'originale viene mantenuto esattamente una volta — cambiano solo le posizioni — quindi l'output è sempre un anagramma dell'input con la stessa lunghezza. Questa pagina tratta la sintassi, il valore restituito, esempi eseguibili, errori comuni (incluso un importante avvertimento sulla sicurezza) e le funzioni correlate.
Sintassi
str_shuffle(string $string): stringParametri
$string(obbligatorio) — la stringa di input di cui si vogliono mescolare i caratteri.
Valore restituito
str_shuffle() restituisce una nuova stringa contenente gli stessi caratteri di $string in ordine casuale. La stringa originale non viene modificata, perché PHP passa il valore per valore e la funzione restituisce una nuova stringa. La stringa restituita ha sempre la stessa lunghezza dell'input.
Esempio di base
Qui $string contiene "Hello, World!". str_shuffle() riorganizza casualmente i suoi 13 caratteri e restituisce il risultato mescolato, che viene memorizzato in $shuffled e stampato. Poiché l'ordine è casuale, si vedrà un arrangement diverso quasi ad ogni esecuzione — ma lettere, virgola, spazio e punto esclamativo sono tutti ancora presenti.
Generare una stringa o token casuale
Un caso d'uso comune è costruire un breve codice casuale mescolando un pool di caratteri consentiti e prendendo i primi caratteri:
<?php
$pool = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$code = substr(str_shuffle($pool), 0, 6);
echo $code; // e.g. "K3PQ8A"Questo garantisce l'assenza di caratteri ripetuti nel codice, poiché ogni carattere del pool appare al massimo una volta dopo il mescolamento.
Avvertenza sulla sicurezza: non usarla per password o token
str_shuffle() non è crittograficamente sicura. Internamente utilizza il generatore di numeri pseudo-casuali di uso generale di PHP, che è prevedibile e non adatto a scopi legati alla sicurezza. Non usarla mai per generare password, ID di sessione, token di reimpostazione password o chiavi API.
Per valori casuali sicuri, usare random_int() o random_bytes():
<?php
// Cryptographically secure 16-character token
echo bin2hex(random_bytes(8)); // e.g. "9f2c1ab07e3d4501"Utilizzo con stringhe multibyte (UTF-8)
str_shuffle() opera sui byte, non sui caratteri Unicode. Per testo ASCII semplice questo è equivalente, ma per testo multibyte (come caratteri accentati o non latini) può dividere un singolo carattere tra i confini dei byte e produrre output non valido o corrotto:
<?php
// "héllo" — the é is two bytes in UTF-8, so shuffling bytes can corrupt it
echo str_shuffle("héllo"); // may produce broken charactersSe è necessario mescolare caratteri Unicode in modo sicuro, dividere prima la stringa in caratteri (ad esempio con preg_split('//u', ...)), mescolare l'array e poi ricombinarlo.
Note e avvertenze
- Il mescolamento è uniforme nel senso che ogni permutazione è ugualmente probabile, ma il risultato non è deterministico — non è possibile impostare un seed direttamente. (L'impostazione del generatore globale con
mt_srand()lo influenza nelle versioni PHP precedenti, ma farne affidamento è sconsigliato.) - Passare una stringa vuota restituisce una stringa vuota.
- I caratteri duplicati rimangono duplicati — mescolare
"aaa"restituisce sempre"aaa". - La variabile originale rimane invariata; assegnare il valore restituito per conservare il risultato.
Funzioni correlate
shuffle()— riordina casualmente gli elementi di un array (non una stringa).str_split()— divide una stringa in un array di caratteri, utile per il mescolamento sicuro con multibyte.mt_rand()— genera un numero intero casuale.str_repeat()— ripete una stringa un numero specificato di volte.str_replace()— sostituisce le occorrenze di una sottostringa.