W3docs

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): string

Parametri

  • $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

php— editable, runs on the server

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 characters

Se è 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.

Esercitazione

Pratica
Cosa permette di ottenere la funzione str_shuffle() in PHP?
Cosa permette di ottenere la funzione str_shuffle() in PHP?
Was this page helpful?