生成随机数
1、可预测的随机数
function pick_color(){
$colors = array('red','orange','yellow','blue','green','indigo','violet');
$i = mt_rand(0,count($colors)-1);
return $colors[$i];
}
mt_srand(11);
$first = pick_color();
$second = pick_color();
print "$first is red and $second is yellow.";
2、生成偏随机数
// 定义一个名为rand_weighted的函数,它接受一个关联数组作为参数
function rand_weighted($numbers){
$total = 0; // 初始化一个变量来存储所有权重的总和
foreach($numbers as $number => $weight){ // 遍历传入的数组
$total += $weight; // 将当前元素的权重加到总和中
$distribution[$number] = $total; // 创建一个新的数组,其键为广告商名称,值为从0到当前权重总和的累积值
}
$rand = mt_rand(0, $total - 1); // 生成一个0到总权重减1之间的随机数
foreach($distribution as $number => $weights){ // 遍历上一步创建的累积权重数组
if($rand < $weights){ // 如果随机数小于当前广告商的累积权重
return $number; // 返回当前广告商的名称
}
}
// 注意:由于逻辑上,上述循环一定会找到并返回一个广告商名称,因此这里实际上不需要return语句或任何其他语句
}
// 定义一个包含广告商及其权重的数组
$ads = array('ford' => 12234, // 福特汽车,权重为12234
'att' => 33424, // 美国电话电报公司,权重为33424
'ibm' => 16823); // 国际商业机器公司,权重为16823
$ad = rand_weighted($ads); // 调用rand_weighted函数,传入广告商数组,并将返回的广告商名称存储在$ad变量中
print $ad; // 打印随机选择的广告商名称
3、使用生成器函数
// 定义一个生成器函数,它接受一个数组并逐个累加数组中的值,同时产出键和累加的总和
function incremental_total($numbers){
$total = 0; // 初始化累加器
foreach($numbers as $number => $weight){ // 遍历数组
$total += $weight; // 累加当前元素的值
yield $number => $total; // 产出当前键和累加的总和
}
}
// 定义一个函数,它接受一个数组,根据权重随机选择一个键,并返回该键
function rand_weighted_generator($numbers){
$total = array_sum($numbers); // 计算数组中所有值的总和
$rand = mt_rand(0, $total - 1); // 生成一个0到总和减1之间的随机数
print "$rand"; // 打印随机数(调试用)
print '
'; // 打印换行符
foreach(incremental_total($numbers) as $number => $weight){ // 遍历生成器产出的结果
print "$number".'--->'."$weight"; // 打印当前键和累加的总和(调试用)
print '<br />'; // 打印换行符
if($rand < $weight){ // 如果随机数小于当前累加的总和
return $number; // 返回当前键(即随机选择的键)
}
}
// 注意:由于逻辑上,上述循环一定会找到并返回一个键,因此这里不需要额外的return语句
// 但实际上,如果数组为空或存在其他异常情况,这里可能需要处理或抛出异常
}
// 定义一个包含广告商及其权重的数组
$ads = array('ford' => 12234,
'att' => 33424,
'ibm' => 16823);
$ad = rand_weighted_generator($ads); // 调用函数并尝试获取随机选择的广告商
print $ad; // 打印随机选择的广告商(这里实际上会正常工作,因为函数会返回一个值)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek-R1本地部署如何选择适合你的版本?看这里
· 开源的 DeepSeek-R1「GitHub 热点速览」
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 揭秘 Sdcb Chats 如何解析 DeepSeek-R1 思维链
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)