PHP 怎樣隨機獲取數組中的值

最近更新時間 2020-12-13 19:12:59

使用 PHP 提供的 array_rand 函數可以隨機獲取數組中的一個值,該函數返回的是函數的索引,還需要根據索引值獲取數組的實際值。

array_rand 接收一個必傳參數。可以 num 表示需要獲取隨機的個數,默認為取出一個值,取出數量如果超過 array 的長度,就會導致 E_WARNING 錯誤,並返回 NULL。

隨機獲取數組中的一個值

第一種: 使用 array_rand 函數隨機返回數組中的一個 key 值,再根據 key 返回數組實際值,如下所示:

<?php
/**
 *
 * PHP 示例,隨機獲取數組的值
 *
 * @since Version 1.0.0
 * @filesource
 */

class ArrayHelper {
  
  // 隨機返回一個數組的值,返回值類型由數組的值決定
  public static function arrayRand($arr) {
    // 返回數組隨機值
    return $arr[array_rand($arr)];
  }
}

// Testing
$arr = array("Home", "Explore", "Messages");

$rand = ArrayHelper::arrayRand($arr);
print_r($rand);
Explore

如果 $arr 數組的值為空,函數返回 Null,不會拋出任何異常。

第二種: 如果 $arr 是一維數組,還可以使用 array_flip 函數實現隨機獲取一個值。如果 $arr 的值是一個二維數組,該元素會被忽略。如下所示:

<?php
/**
 *
 * PHP 示例,隨機獲取數組的值
 *
 * @since Version 1.0.0
 * @filesource
 */

class ArrayHelper {

  public static function arrayRandFlip($arr) {
    // 交換數組中的鍵和值
    $flipped = array_flip($arr);

    // 使用 array_rand 隨機返回 key 值
    return array_rand($flipped);
  }  
}

// Testing
$arr = array("Home", "Explore", "Messages");

$rand = ArrayHelper::arrayRandFlip($arr);
print_r($rand);
Messages

第三種: 可以使用 shuffle 函數實現隨機獲取一個值,如下所示:

<?php
/**
 *
 * PHP 示例,隨機獲取數組的值
 *
 * @since Version 1.0.0
 * @filesource
 */

class ArrayHelper {

  public static function arrayRandShuffle($arr) {

    // 使用 array_keys 獲取數組的 key 值
    $keys = array_keys($arr);

    // 打亂 keys 數組
    shuffle($keys);

    // 返回隨機數組的值
    return $arr[$keys[0]];
  } 
}

// Testing
$arr = array("Home", "Explore", "Messages");

$rand = ArrayHelper::arrayRandShuffle($arr);
print_r($rand);
Home

以上函數使用偽隨機數產生器,並不適合密碼學的場合。

rss_feed