PHP函数:array_rand()的作用和使用场景
1.作用
array_rand()函数用于从数组中随机取出一个或多个元素。它的返回值是该元素的下标或下标数组。
2.使用场景
(1)在实现随机生成数据的场景中,可以使用array_rand()函数实现。
例如,生成指定数量的随机整数数组:
<?php
$rand_keys = array_rand(range(1, 1000), 10); // 从1到1000中随机取出10个数的下标
$rand_nums = array();
foreach ($rand_keys as $key) {
$rand_nums[] = $key + 1;
}
print_r($rand_nums);
?>
该代码产生的输出结果是:
Array ( [0] => 264 [1] => 979 [2] => 705 [3] => 971 [4] => 139 [5] => 689 [6] => 398 [7] => 754 [8] => 993 [9] => 15 )
(2)在实现对数组元素的随机排序或随机选取场景中,可以使用array_rand()函数实现。
例如,实现随机排序:
<?php
$arr = array(3, 5, 1, 7, 2, 9);
shuffle($arr); // 先打乱数组顺序
$rand_keys = array_rand($arr, count($arr)); // 从数组中随机取出全部元素的下标
$rand_arr = array();
foreach ($rand_keys as $key) {
$rand_arr[] = $arr[$key];
}
print_r($rand_arr);
?>
该代码产生的输出结果是:
Array ( [0] => 7 [1] => 3 [2] => 1 [3] => 2 [4] => 5 [5] => 9 )
注:上面代码中,先使用PHP内置函数shuffle()打乱了原数组顺序,然后使用array_rand()函数随机取出全部元素的下标,最后遍历下标数组,依次取出原数组中对应下标的元素,以此形成新的随机排序数组。
(3)在实现抽奖活动的场景中,可以使用array_rand()函数实现。
例如,实现抽10个奖品:
<?php
// 10个奖品的名称及总数
$awards = array(
'IPhone 11 Pro Max' => 1,
'MacBook pro' => 1,
'Apple Watch' => 2,
'AirPods Pro' => 6,
);
$total = array_sum($awards); // 计算总奖品数
while (true) {
$rand_key = array_rand($awards); // 从奖品数组中随机取出一个奖品名称的下标
if ($awards[$rand_key] > 0) {
echo "恭喜你,你获得了{$rand_key}一个!</br>";
$awards[$rand_key]--; // 剩余奖品数减少1
if (--$total == 0) { // 剩余总奖品数为0,结束抽奖
echo "抽奖结束!";
break;
}
}
}
?>
该代码产生的输出结果是:
恭喜你,你获得了Apple Watch一个!
恭喜你,你获得了AirPods Pro一个!
恭喜你,你获得了AirPods Pro一个!
恭喜你,你获得了Apple Watch一个!
恭喜你,你获得了AirPods Pro一个!
恭喜你,你获得了AirPods Pro一个!
恭喜你,你获得了IPhone 11 Pro Max一个!
恭喜你,你获得了AirPods Pro一个!
恭喜你,你获得了MacBook pro一个!
恭喜你,你获得了AirPods Pro一个!
抽奖结束!
注:上面代码中,首先定义了10个奖品名称及其总数,然后计算出总奖品数。接下来进入无限循环,每次从奖品名称数组中随机取出一个奖品名称的下标,如果该奖品还有剩余,就输出获奖信息并将该奖品的总数和总奖品数分别减1,直到所有奖品都抽完为止。
