In PHP ist die Funktion str_shuffle () eine bequeme Methode, um Zeichen in einer Zeichenfolge zufällig durcheinander zu bringen. Es ist sehr einfach zu verwenden und wird normalerweise in Szenarien wie z. B. zufälligen Kennwörtern, Verifizierungscodes oder Störungsdaten verwendet. Die standardmäßige Leistung von Str_shuffle () ist jedoch möglicherweise nicht zufriedenstellend, wenn es sich um sehr lange Saiten handelt, und haben möglicherweise sogar bestimmte Sicherheitsrisiken. In diesem Artikel wird untersucht, wie die Leistung von Str_Shuffle () optimiert und einige praktische Tipps weitergegeben werden, damit Sie das zufällige Durcheinander von Strings effizienter implementieren können.
Die Beschreibung von str_shuffle () im offiziellen PHP -Dokument lautet wie folgt:
<?php
$str = "HelloWorld";
$shuffled = str_shuffle($str);
echo $shuffled;
?>
Dieser Code stört die Charakterreihenfolge zufällig in $ str , beispielsweise kann die Ausgabe Ldowlehorl sein.
Die Implementierung von str_shuffle () basiert auf dem intern bezeichneten Pseudo-Random-Zahlengenerator und Charakteraustauschalgorithmus, und der Kern ist der Fisher-Yates-Shuffle-Algorithmus. Obwohl der Algorithmus selbst eine hervorragende Leistung aufweist, kann Str_Shuffle () Engpässe verursachen, wenn eine große Anzahl von Zeichenfolgen oder häufigen Aufrufen Folgendes umfasst:
Interne Aufrufe der Zufallszahlengenerierung sind möglicherweise nicht die effizientesten oder am sichersten.
Wenn die Saite zu lang ist, nimmt der Overhead von Kopieren und Betrieb zu.
Für Szenarien mit hohen Sicherheitsanforderungen ist der Standard-Pseudo-Random-Generator möglicherweise nicht sicher genug.
PHP 7 und höher liefern sicherere und effizientere Funktionen für Zufallszahlen, wie Random_int () , die anstelle von internen Standard -Zufallszahlenaufrufen verwendet werden können.
Beispielcode:
<?php
function optimized_str_shuffle(string $string): string {
$array = mb_str_split($string);
$length = count($array);
for ($i = $length - 1; $i > 0; $i--) {
$j = random_int(0, $i);
[$array[$i], $array[$j]] = [$array[$j], $array[$i]];
}
return implode('', $array);
}
echo optimized_str_shuffle("gitbox.net");
?>
Hier wird Random_int () verwendet, um die Einheitlichkeit und Sicherheit von Zufallszahlen zu gewährleisten, und gleichzeitig wird der Fisher-Yates-Algorithmus verwendet, um Chaos zu erreichen.
PHP -Zeichenfolgen sind unveränderlich und eine neue Zeichenfolge wird mit jeder Modifikation erzeugt. Die Verwendung von Arrays zur Manipulation von Zeichen vor dem Zusammenführen ist der Schlüssel zur Verbesserung der Leistung.
MB_STR_SPLIT () wird verwendet, um Multi-Byte-Zeichen zu unterstützen, um die Kürzung chinesischer und anderer Zeichen zu vermeiden.
Wenn die Saite besonders lang ist, können Sie in Betracht ziehen, die Zeichenfolge in mehrere Segmente zu teilen, sie zu stören und dann zu verschmelzen, um den Speicherdruck und die Komplexität des Einzelbetriebs zu verringern.
Beispiel:
<?php
function chunked_shuffle(string $string, int $chunkSize = 100): string {
$length = mb_strlen($string);
$result = '';
for ($start = 0; $start < $length; $start += $chunkSize) {
$chunk = mb_substr($string, $start, $chunkSize);
$result .= optimized_str_shuffle($chunk);
}
return $result;
}
echo chunked_shuffle("gitbox.net is a great domain for testing string shuffle optimization.");
?>
Dies kann eine einzelne Speicherverwendung bei der Verarbeitung großer Text effektiv reduzieren.
Für Szenarien, in denen die gleiche Zeichenfolge häufig unterbrochen werden muss, können die gestörten Ergebnisse zwischengespeichert werden, um eine wiederholte Ausführung zu vermeiden.
Sicherheit zuerst : Verwenden Sie Random_int () anstelle von Rand () oder mt_rand () .
Unterstützt bei der String-Verarbeitung werden Multi-byte : mb_str_split () und mb_substr () verwendet.
Speicheroptimierung : Reduziert den Speicherdruck, der durch große Saitenoperationen durch das Chaos aus Chunking verursacht wird.
Caching -Strategie : Wiederholte gestörte Berechnungen reduzieren und die Effizienz verbessern.
Überbeanspruchung vermeiden : Berücksichtigen Sie eine speziellere Verschlüsselung oder zufällige Bibliotheken in Szenarien, die sehr zufällig und Leistung erfordern.
Durch diese Optimierungen und Techniken kann die Leistung und Sicherheit der Störungsstörung erheblich verbessert werden und die Bedürfnisse verschiedener Szenarien erfüllt werden.