W3docs

str_shuffle()

Unser Artikel erklärt die PHP-Funktion str_shuffle(), die Zeichen in einem String zufällig umordnet, mit Syntax, Beispielen und Sicherheitshinweisen.

Die PHP-Funktion str_shuffle() ordnet die Zeichen eines Strings zufällig neu an und gibt das Ergebnis als neuen String zurück. Jedes Zeichen des Originals bleibt genau einmal erhalten — nur ihre Positionen ändern sich — sodass die Ausgabe stets ein Anagramm der Eingabe mit derselben Länge ist. Diese Seite behandelt die Syntax, den Rückgabewert, ausführbare Beispiele, häufige Fallstricke (einschließlich eines wichtigen Sicherheitshinweises) sowie verwandte Funktionen.

Syntax

str_shuffle(string $string): string

Parameter

  • $string (erforderlich) — der Eingabe-String, dessen Zeichen gemischt werden sollen.

Rückgabewert

str_shuffle() gibt einen neuen String zurück, der dieselben Zeichen wie $string in zufälliger Reihenfolge enthält. Der ursprüngliche String wird nicht verändert, da PHP den Wert per Wert übergibt und die Funktion einen neuen String zurückgibt. Der zurückgegebene String hat stets dieselbe Länge wie die Eingabe.

Einfaches Beispiel

php— editable, runs on the server

Hier enthält $string den Wert "Hello, World!". str_shuffle() ordnet dessen 13 Zeichen zufällig neu an und gibt das gemischte Ergebnis zurück, das wir in $shuffled speichern und ausgeben. Da die Reihenfolge zufällig ist, ergibt sich bei fast jedem Aufruf eine andere Anordnung — aber die Buchstaben, das Komma, das Leerzeichen und das Ausrufezeichen sind alle noch vorhanden.

Einen zufälligen String oder Token generieren

Ein häufiger Anwendungsfall ist das Erstellen eines kurzen Zufallscodes, indem ein Pool erlaubter Zeichen gemischt und die ersten paar Zeichen abgeschnitten werden:

<?php
$pool = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$code = substr(str_shuffle($pool), 0, 6);
echo $code; // e.g. "K3PQ8A"

Dies stellt sicher, dass der Code keine wiederholten Zeichen enthält, da jedes Zeichen des Pools nach dem Mischen höchstens einmal vorkommt.

Sicherheitswarnung: Nicht für Passwörter oder Tokens verwenden

str_shuffle() ist nicht kryptografisch sicher. Intern verwendet es PHPs allgemeinen Pseudozufallszahlengenerator, der vorhersagbar und für sicherheitskritische Anwendungen ungeeignet ist. Verwenden Sie es niemals zur Generierung von Passwörtern, Session-IDs, Passwort-Reset-Tokens oder API-Schlüsseln.

Für sichere Zufallswerte verwenden Sie random_int() oder random_bytes():

<?php
// Cryptographically secure 16-character token
echo bin2hex(random_bytes(8)); // e.g. "9f2c1ab07e3d4501"

Arbeiten mit Multibyte-Strings (UTF-8)

str_shuffle() arbeitet auf Byte-Ebene, nicht auf Unicode-Zeichenebene. Bei reinem ASCII-Text ist das dasselbe, aber bei Multibyte-Text (wie akzentuierten oder nicht-lateinischen Zeichen) kann es ein einzelnes Zeichen an Byte-Grenzen aufteilen und ungültige, korrumpierte Ausgabe erzeugen:

<?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

Wenn Sie Unicode-Zeichen sicher mischen müssen, teilen Sie den String zunächst in Zeichen auf (z. B. mit preg_split('//u', ...)), mischen Sie das Array und fügen Sie es wieder zusammen.

Hinweise und Fallstricke

  • Das Mischen ist gleichmäßig in dem Sinne, dass jede Permutation gleich wahrscheinlich ist, aber das Ergebnis ist nicht deterministisch — es kann nicht direkt gesetzt werden. (Das Setzen des globalen Generators mit mt_srand() beeinflusst es bei älteren PHP-Versionen, aber darauf zu verlassen wird nicht empfohlen.)
  • Die Übergabe eines leeren Strings gibt einen leeren String zurück.
  • Doppelte Zeichen bleiben doppelt — das Mischen von "aaa" ergibt stets "aaa".
  • Die ursprüngliche Variable bleibt unverändert; weisen Sie den Rückgabewert zu, um das Ergebnis zu behalten.

Verwandte Funktionen

  • shuffle() — ordnet die Elemente eines Arrays zufällig neu an (kein String).
  • str_split() — teilt einen String in ein Array von Zeichen auf, nützlich für Multibyte-sicheres Mischen.
  • mt_rand() — generiert eine zufällige Ganzzahl.
  • str_repeat() — wiederholt einen String eine bestimmte Anzahl von Malen.
  • str_replace() — ersetzt Vorkommen einer Teilzeichenkette.

Übung

Übung
Was kann mit der Funktion str_shuffle() in PHP erreicht werden?
Was kann mit der Funktion str_shuffle() in PHP erreicht werden?
Was this page helpful?