php 实现概率
PHP 实现概率的方法
使用 rand() 函数生成随机数
rand() 函数可以生成指定范围内的随机整数,结合条件判断可实现概率控制。例如实现 30% 概率的事件:
$random = rand(1, 100);
if ($random <= 30) {
// 30% 概率执行
} else {
// 70% 概率执行
}
使用 mt_rand() 提高随机性质量
mt_rand() 比 rand() 具有更好的随机分布特性,适合对随机性要求较高的场景:

$chance = mt_rand(1, 100) <= 25; // 25% 概率
权重概率分配
当需要处理多个不同概率的事件时,可以使用累积概率区间法:
$options = [
'A' => 10, // 10%
'B' => 30, // 30%
'C' => 60 // 60%
];
$rand = mt_rand(1, 100);
$cumulative = 0;
foreach ($options as $key => $weight) {
$cumulative += $weight;
if ($rand <= $cumulative) {
$selected = $key;
break;
}
}
概率衰减算法
实现随时间或次数变化的动态概率,常用于游戏机制:

$baseProbability = 0.2; // 基础概率20%
$decayFactor = 0.95; // 每次衰减5%
$attempts = 5; // 尝试次数
$currentProbability = $baseProbability * pow($decayFactor, $attempts - 1);
蒙特卡洛模拟验证
可以通过大量模拟验证概率实现的准确性:
$trials = 100000;
$success = 0;
for ($i = 0; $i < $trials; $i++) {
if (mt_rand(1, 100) <= 15) { // 测试15%概率
$success++;
}
}
$actualRate = ($success / $trials) * 100; // 计算实际概率百分比
高斯分布概率
使用 Box-Muller 变换生成正态分布随机数:
function gaussianRandom($mean = 0.0, $stddev = 1.0) {
$u = $v = 0;
while ($u == 0) $u = mt_rand() / mt_getrandmax();
while ($v == 0) $v = mt_rand() / mt_getrandmax();
return $mean + $stddev * sqrt(-2 * log($u)) * cos(2 * M_PI * $v);
}
注意:所有概率实现都应考虑随机数生成器的质量,对于关键应用建议使用 random_int() 等加密安全函数。






