使用 PHP 提供的 array_rand 函数可以随机获取数组中的一个值,该函数返回的是函数的索引,还需要根据索引值获取数组的实际值。
array_rand 接收一个必传参数。可以 num 表示需要获取随机的个数,默认为取出一个值,取出数量如果超过 array 的长度,就会导致 E_WARNING 错误,并返回 NULL。
随机获取数组中的一个值
第一种: 使用 array_rand 函数随机返回数组中的一个 key 值,再根据 key 返回数组实际值,如下所示:
/**
*
* 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 示例,随机获取数组的值
*
* @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 示例,随机获取数组的值
*
* @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
以上函数使用伪随机数产生器,并不适合密码学的场合。