現在の位置: ホーム> 最新記事一覧> STR_SHUFFLE機能を使用して、PHPの文字と数字の順序を破壊する方法は?実装方法は何ですか?

STR_SHUFFLE機能を使用して、PHPの文字と数字の順序を破壊する方法は?実装方法は何ですか?

gitbox 2025-06-11

什么是str_shuffle函数?

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

传入的$文字列参数为原始字符串、函数返回打乱后的新字符串。


基本用法

下面是一个简单的使用示例:

 <span><span><span class="hljs-meta">&lt;?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">?&gt;</span></span><span>
</span></span>

运行上面的代码、你会看到一个字母和数字顺序被打乱后的结果、比如、比如: 3E5D6ABF241C 。每次运行的结果都有可能不同。


实现一个混合字符串打乱器

通常我们希望不仅仅是对静态字符串打乱、而是动态生成字符串后再打乱、比如生成一个包含数字和字母的随机密码:

 <span><span><span class="hljs-meta">&lt;?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">?&gt;</span></span><span>
</span></span>

这个方法先将可选字符池打乱、然后取前$ length个字符作为密码。注意、 str_shuffle是基于伪随机的方式打乱字符串的、因此不能用于安全性要求较高的加密场景。


与其他方法的对比

虽然str_shuffle很方便、但在某些场景下你可能需要更灵活的方式来打乱数据、比如:

  1. 打乱数组元素顺序shuffle()函数。

 <span><span><span class="hljs-meta">&lt;?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">?&gt;</span></span><span>
</span></span>
  1. 使用自定义规则打乱:你可以设计自己的打乱逻辑、比如限制打乱顺序、固定某些字符位置等。

  2. 在url:有时候你可能希望生成一个打乱后的短链或识别码、比如:

 <span><span><span class="hljs-meta">&lt;?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">?&gt;</span></span><span>
</span></span>

https://gitbox.net/u/zc3x1yba2


注意事项

  • str_shuffle

  • 若需更安全的随机打乱操作、可以结合random_int()与自定义算法进行字符重排。

  • 对于多字节字符(如中文)、 str_shuffle不支持、应先转为数组再打乱。