主要实现了一个基于权重的概率选择功能。它首先定义了一个包含奖项及其对应权重的数组 $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 数组(包含权重信息)来随机返回一个元素。

  1. 初始化两个变量 $i 和 $temp,其中 $temp 用于存储临时数组。
  2. 使用 foreach 循环遍历 $data 数组中的每个元素。
  3. 对于每个元素,使用内部 for 循环根据其权重 $v['weight'] 将该元素重复添加到 $temp 数组中。这样,权重越高的元素在 $temp 数组中出现的次数就越多。
  4. 计算 $temp 数组的长度(元素个数),存储在 $num 中。
  5. 使用 mt_rand(0, $num-1) 生成一个 0 到 $num-1 之间的随机数,存储在 $int 中。
  6. 使用这个随机数 $int 从 $temp 数组中选择一个元素,存储在 $result 中。
  7. 返回 $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"
}