bool shuffle ( array &$array )
true 成功 / false 失敗srand() 播種,自動初始化$arr = range(1, 8); // [1,2,3,4,5,6,7,8] print_r($arr); shuffle($arr); print_r($arr);
輸出示例 (每次不同): Array ( [0]=>1 [1]=>2 [2]=>3 [3]=>4 [4]=>5 [5]=>6 [6]=>7 [7]=>8 ) Array ( [0]=>6 [1]=>1 [2]=>3 [3]=>2 [4]=>5 [5]=>7 [6]=>8 [7]=>4 )
$arr = ["a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5]; shuffle($arr); print_r($arr);
輸出: Array ( [0]=>5 [1]=>2 [2]=>1 [3]=>3 [4]=>4 ) // 原鍵名 a,b,c,d,e 全部丟失,重置為 0-4
| 場景 | 代碼示例 |
|---|---|
| 隨機推薦商品 | shuffle($products); $recommended = array_slice($products, 0, 5); |
| 題庫隨機出題 | shuffle($questions); $exam = array_slice($questions, 0, 20); |
| 負載均衡節點選擇 | shuffle($servers); $target = $servers[0]; |
| 洗牌算法 | $deck = range(1,52); shuffle($deck); |
| 隨機抽獎 | shuffle($participants); $winners = array_slice($participants, 0, 3); |
shuffle_assoc() (見上篇文章)random_int() / openssl_random_pseudo_bytes()srand((float)microtime() * 1000000) → 升級 PHP 或統一入口播種array_rand() + 循環取值更快、代碼更簡潔function array_random(array $array, int $count): array {
$keys = array_keys($array);
$selectedKeys = array_rand(array_flip($keys), min($count, count($keys)));
$selectedKeys = (array)$selectedKeys; // array_rand 可能返回單值
return array_intersect_key($array, array_flip($selectedKeys));
}
// 使用
$randomItems = array_random($assocArray, 3); // 保持原鍵名
shuffle() 是 PHP 數組隨機化的核心函數,特點是**原地修改、重置數字鍵名、O(n) 性能**。理解其「鍵名丟失」行為至關重要。關聯數組、多維數組、加密場景需使用替代方案。實際開發中常配合 array_slice() 實現隨機取樣。