PHP shuffle():隨機打亂陣列

2020-07-16 10:05:30
前面我們介紹了可以使用《array_rand() 函數》隨機獲取陣列元素。在 PHP 中還有另一個函數,它能夠將陣列隨機打亂,或者說它可以隨機排序陣列——shuffle() 函數。

shuffle() 函數不僅會將陣列隨機打亂,還會刪除陣列原有的鍵名,並重新建立新的鍵名,函數的語法格式如下:

shuffle($array)

其中 $array 為待操作的陣列。函數執行成功時會返回 TRUE,執行失敗則返回 FALSE。

提示:shuffle() 函數只對陣列的第一維度適用,對於多維陣列中第一維度之外的維度則無效。

與陣列排序相關的函數
函數 說明
sort() 對陣列元素進行升序排序(從小到大)。
rsort() 對陣列元素進行降序排序(從大到小)。
asort() 對陣列元素進行升序排序(從小到大),並保持索引關係。
arsort() 對陣列元素進行降序排序(從大到小),並保持索引關係。
shuffle() 對陣列元素進行隨機排序,也就是隨機打亂陣列。

【範例】使用 shuffle() 函數打亂陣列順序。
<?php
    $info = array(
        'id'       => 1234,
        'url'      => 'http://c.biancheng.net/php/',
        'language' => 'PHP',
        'article'  => 'shuffle()函數'
    );
    echo '<pre>';
    echo '陣列打亂順序前:';
    print_r($info);
    echo '陣列打亂順序後:';
    shuffle($info);
    print_r($info);
?>
執行結果如下:

陣列打亂順序前:Array
(
    [id] => 1234
    [url] => http://c.biancheng.net/php/
    [language] => PHP
    [article] => shuffle()函數
)
陣列打亂順序後:Array
(
    [0] => http://c.biancheng.net/php/
    [1] => PHP
    [2] => shuffle()函數
    [3] => 1234
)

與 array_rand() 函數類似,使用 shuffle() 函數同樣可以實現生成隨機驗證碼的功能,範例程式碼如下:
<?php
    function verCode(){
        $arr    = array_merge(range('A','Z'), range('a', 'z'), range('1', '9'));
        shuffle($arr);
        $newArr = array_slice($arr, 0, 4);
        $str    = implode('', $newArr);
        return $str;
    }
    echo verCode().'<br>';
    echo verCode().'<br>';
    echo verCode().'<br>';
?>
執行結果如下:

WLmj
ngqO
EolQ

注意:因為 shuffle() 函數是隨機將陣列打亂,所以每次執行的結果會不一樣。