bool shuffle ( array &$array )
<?php
$a = [
'1' => 'Xiao',
'2' => 'Da',
'3' => 'Zuo',
'4' => 'You'
];
echo "原始陣列:<br/>";
print_r($a);
shuffle($a);
echo "<br/>打亂後:<br/>";
print_r($a);
?>
典型輸出:
原始陣列:
Array ( [1] => Xiao [2] => Da [3] => Zuo [4] => You )
打亂後:
Array ( [0] => Da [1] => Xiao [2] => You [3] => Zuo )
觀察重點:
1. 值的順序隨機化
2. 鍵名從字串 '1'..'4' 變為整數 0..3
| 需求 | shuffle() 問題 | 解決方案 |
|---|---|---|
| 保留關聯鍵名 | 鍵名重置為數字索引 | uksort($arr, fn() => rand(-1,1)) 或自訂 Fisher-Yates 保留鍵名版本 |
| 可重現的隨機序列 | 無法指定種子 | PHP 7.1+ 內建隨機器已自動播種;舊版可用 srand($seed) 配合 shuffle |
| 多維陣列只打亂第一層 | 同樣適用,但子陣列順序不變 | 若需深層打亂需自行遞歸 |
random_int + 自訂演算法)。shuffle() 是 PHP 陣列隨機化的首選工具,簡潔高效。只需牢記「鍵名會重置」這一特性,即可避開最常見的坑。若專案需保留鍵名,請採用 uksort 搭配隨機比較函式,或自行實作保留鍵名的 Fisher-Yates 演算法。