strt_shuffle是 php 标准库中的一个函数, 用于随机打乱一个字符串中的所有字符, 并返回打乱后的字符串, 并返回打乱后的字符串: 它的函数原型如下:
<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>
传入的$ string参数为原始字符串, 函数返回打乱后的新字符串။
下面是一个简单的使用示例:
<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>
运行上面的代码, 你会看到一个字母和数字顺序被打乱后的结果, 比如: 3E5D6BF241c ။ 每次运行的结果都有可能不同။
通常我们希望不仅仅是对静态字符串打乱, 而是动态生成字符串后再打乱, 比如生成一个包含数字和字母的随机密码, 比如生成一个包含数字和字母的随机密码:
<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>
这个方法先将可选字符池打乱, 然后取前$ အရှည်个字符作为密码။ 注意, strow_shuffle是基于伪随机的方式打乱字符串的, 因此不能用于安全性要求较高的加密场景။
虽然strot_shuffle很方便, 比如, 比如: 比如: 比如: 比如: 比如:
打乱数组元素顺序: 可以使用shuffle ()函数။
<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>
使用自定义规则打乱: 你可以设计自己的打乱逻辑, 比如限制打乱顺序, 固定某些字符位置等, 固定某些字符位置等။
在 url 中嵌入打乱逻辑: 有时候你可能希望生成一个打乱后的短链或识别码, 比如, 比如: 比如:
<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>
生成类似https://gitbox.net/zc3x1yba2的 URL, 的 url, 的။
strt_shuffle使用的是rand ()函数, 因此在安全敏感场合不推荐使用, 比如密码生成, 加密令牌等။
若需更安全的随机打乱操作, 可以结合可以结合ကျပန်း ()与自定义算法进行字符重排။
对于多字节字符 (如中文), stst_shuffle不支持, 应先转为数组再打乱။