str_shuffle is a function in PHP's standard library that randomly shuffles all the characters in a string and returns the shuffled version. Its function prototype is as follows:
<span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-title function_ invoke__">str_shuffle</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$string</span></span><span>)
</span></span>
The $string parameter is the original input string, and the function returns the newly shuffled string.
Here is a simple example of how to use it:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$original</span></span><span> = </span><span><span class="hljs-string">'abcdef123456'</span></span><span>;
</span><span><span class="hljs-variable">$shuffled</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_shuffle</span></span><span>(</span><span><span class="hljs-variable">$original</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$shuffled</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Running the above code will display the shuffled result of letters and numbers, for example: 3e5d6abf241c. The result may vary each time it's run.
Typically, we want to shuffle not just static strings, but strings generated dynamically, such as a random password consisting of numbers and letters:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$length</span></span><span> = </span><span><span class="hljs-number">10</span></span><span>;
</span><span><span class="hljs-variable">$chars</span></span><span> = </span><span><span class="hljs-string">'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'</span></span><span>;
</span><span><span class="hljs-variable">$shuffled</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_shuffle</span></span><span>(</span><span><span class="hljs-variable">$chars</span></span><span>);
</span><span><span class="hljs-variable">$password</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$shuffled</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$length</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$password</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
This method first shuffles the character pool, then takes the first $length characters as the password. Note that str_shuffle uses a pseudo-random method and should not be used for secure cryptographic operations.
While str_shuffle is very convenient, in some scenarios you might need more flexible shuffling approaches, such as:
Shuffling array elements: Use the shuffle() function.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_split</span></span><span>(</span><span><span class="hljs-string">'abcdef123456'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">shuffle</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span><span><span class="hljs-variable">$shuffled</span></span><span> = </span><span><span class="hljs-title function_ invoke__">implode</span></span><span>(</span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-variable">$array</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$shuffled</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Custom shuffling rules: You can define your own logic, such as restricting shuffle order or locking specific character positions.
Embedding shuffled strings in URLs: For example, generating a unique short link or identifier like:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$id</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_shuffle</span></span><span>(</span><span><span class="hljs-string">'ABC123XYZ'</span></span><span>);
</span><span><span class="hljs-variable">$url</span></span><span> = </span><span><span class="hljs-string">'https://gitbox.net/u/'</span></span><span> . </span><span><span class="hljs-variable">$id</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$url</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
This generates a URL like https://gitbox.net/u/ZC3X1YBA2 that can uniquely identify a user or resource.
str_shuffle uses the rand() function internally, so it is not recommended for use in security-sensitive scenarios like password generation or cryptographic tokens.
For more secure random shuffling, consider combining random_int() with a custom algorithm.
str_shuffle does not support multibyte characters (e.g., Chinese). Convert to an array first before shuffling in such cases.