首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP shuffle() 陣列隨機打亂完整用法與關聯陣列鍵值重置說明

     編輯:PHP 相關知識

PHP shuffle() 陣列隨機打亂完整用法

shuffle() 就地打亂陣列順序,**重新索引數字鍵名**,關聯陣列的字串鍵名會遺失。

語法

bool shuffle(array &$array)

索引陣列範例

$arr = range(1, 8);
print_r($shuffle($arr));
// 每次執行結果不同,例如:
// [0=>6, 1=>1, 2=>3, 3=>2, 4=>5, 5=>7, 6=>8, 7=>4]

關聯陣列:鍵名會重置為 0,1,2...

$arr = ["a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5];
shuffle($arr);
print_r($arr);
// [0=>5, 1=>2, 2=>1, 3=>3, 4=>4]  ← 原鍵名 a,b,c,d,e 遺失

保留鍵名的打亂函式

function shuffle_assoc(array &$array) {
    $keys = array_keys($array);
    shuffle($keys);
    $result = [];
    foreach ($keys as $key) {
        $result[$key] = $array[$key];
    }
    $array = $result;
    return $array;
}

$arr = ["a"=>1, "b"=>2, "c"=>3];
shuffle_assoc($arr);
// 可能結果:["c"=>3, "a"=>1, "b"=>2] ← 鍵名保留

多維陣列遞迴打亂

function rec_shuffle(array &$array) {
    $keys = array_keys($array);
    shuffle($keys);
    $result = [];
    foreach ($keys as $key) {
        $val = $array[$key];
        if (is_array($val)) {
            rec_shuffle($val);
        }
        $result[$key] = $val;
    }
    $array = $result;
}

$data = [
    'group1' => ['a', 'b', 'c'],
    'group2' => ['x', 'y', 'z']
];
rec_shuffle($data); // 兩層皆打亂且保留鍵名

注意事項

  • shuffle() 修改原陣列(參考傳遞),回傳 bool
  • PHP 4.2.0+ 無需 srand() 播種,自動處理
  • 大陣列打亂效能佳,O(n) 複雜度
  • 需可重現結果時(測試),可用固定種子 mt_srand(12345) 配合 shuffle()(但影響全域隨機狀態)

掌握 shuffle() 重置鍵名特性,關聯陣列需自行實作保留鍵名版本,多維陣列遞迴處理即可滿足各種打亂需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved