當前位置: 首頁> 最新文章列表> 在PHP中如何用str_shuffle函數打亂字母和數字的順序?實現方法有哪些?

在PHP中如何用str_shuffle函數打亂字母和數字的順序?實現方法有哪些?

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>

傳入的$ string參數為原始字符串,函數返回打亂後的新字符串。 ,函數返回打亂後的新字符串。


基本用法

下面是一個簡單的使用示例:

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

運行上面的代碼


實現一個混合字符串打亂器

通常我們希望不僅僅是對靜態字符串打亂,而是動態生成字符串後再打亂,比如生成一個包含數字和字母的隨機密碼::

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

這個方法先將可選字符池打亂,然後取前$ lengthstr_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的url,用於唯一識別某個用戶或資源。


注意事項

  • str_shuffle使用的是rand()函數,因此在安全敏感場合不推薦使用,比如密碼生成、加密令牌等。

  • 若需更安全的隨機打亂操作,可以結合andan_int()與自定義算法進行字符重排。

  • (對於多字節字符(如中文), str_shuffle不支持,應先轉為數組再打亂。,應先轉為數組再打亂。