主要实现了一个基于权重的概率选择功能。它首先定义了一个包含奖项及其对应权重的数组 $data,然后定义了一个函数 countWeight 来根据这些权重生成一个临时数组,并从该临时数组中随机选择一个元素返回。
代码如下:
// 这里定义了一个二维数组 $data222,每个子数组包含三个键值对:id(奖项的ID)、name(奖项的名称)和 weight(奖项的权重)。
$data222=array(
0=>array('id'=>1,'name'=>'一等奖','weight'=>'3'),
1=>array('id'=>2,'name'=>'二等奖','weight'=>'1'),
2=>array('id'=>3,'name'=>'三等奖','weight'=>'5'),
3=>array('id'=>3,'name'=>'三等奖','weight'=>'1'),
);
// 函数定义
function countWeight($data){
$i=0;
$temp=array();
foreach($data as $v){
for($i=0;$i<$v['weight'];$i++){
$temp[]=$v; //放大数组
}
}
$num = count($temp);
$int=mt_rand(0,$num-1); //获取一个随机数
$result=$temp[$int];
return $result; //返回一维数组
}
这个函数的目的是根据输入的 $data 数组(包含权重信息)来随机返回一个元素。
- 初始化两个变量 $i 和 $temp,其中 $temp 用于存储临时数组。
- 使用 foreach 循环遍历 $data 数组中的每个元素。
- 对于每个元素,使用内部 for 循环根据其权重 $v['weight'] 将该元素重复添加到 $temp 数组中。这样,权重越高的元素在 $temp 数组中出现的次数就越多。
- 计算 $temp 数组的长度(元素个数),存储在 $num 中。
- 使用 mt_rand(0, $num-1) 生成一个 0 到 $num-1 之间的随机数,存储在 $int 中。
- 使用这个随机数 $int 从 $temp 数组中选择一个元素,存储在 $result 中。
- 返回 $result。
调用函数并输出结果
echo '<pre>';
var_dump(countWeight($data222));
这部分代码首先输出一个 <pre> 标签,用于在浏览器中预格式化输出内容。然后,它调用 countWeight 函数并传入 $data222 数组作为参数。最后,使用 var_dump 函数输出函数返回的结果。
注意:在 $data222 数组中,有两个子数组有相同的 id(3)和 name(三等奖),但权重不同。在实际应用中,可能需要根据实际情况调整这种重复情况的处理方式。
另外,由于使用了 mt_rand 函数,每次调用 countWeight 函数时,返回的结果都可能是不同的,因为随机数的生成是随机的。
执行后的效果为
array(3) {
["id"]=>
int(2)
["name"]=>
string(9) "二等奖"
["weight"]=>
string(2) "10"
}