PHP 怎样随机获取数组中的值

Lasted 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

以上函数使用伪随机数产生器,并不适合密码学的场合。