php实现概率
PHP实现概率算法
在PHP中实现概率算法通常涉及权重分配、随机数生成和结果判定。以下是几种常见场景的实现方法:
权重随机选择
通过为每个选项分配权重,实现按概率随机选择:

function weightedRandom($items) {
$total = array_sum(array_column($items, 'weight'));
$rand = mt_rand(1, $total);
$current = 0;
foreach ($items as $item) {
$current += $item['weight'];
if ($rand <= $current) {
return $item['value'];
}
}
}
$items = [
['value' => 'A', 'weight' => 10], // 10%概率
['value' => 'B', 'weight' => 30], // 30%概率
['value' => 'C', 'weight' => 60] // 60%概率
];
$result = weightedRandom($items);
简单概率判断
对于单次概率判断(如30%概率触发事件):

function probabilityCheck($percent) {
return mt_rand(1, 100) <= $percent;
}
if (probabilityCheck(30)) {
// 30%概率执行的代码
}
蒙特卡洛模拟
通过大量随机采样模拟概率事件:
function monteCarloSimulation($iterations, $callback) {
$success = 0;
for ($i = 0; $i < $iterations; $i++) {
if ($callback()) $success++;
}
return $success / $iterations;
}
// 模拟硬币正反面概率
$probability = monteCarloSimulation(10000, function() {
return mt_rand(0, 1) === 1;
});
概率分布函数
实现常见概率分布(如正态分布):
function normalDistribution($mean, $stdDev) {
$u1 = mt_rand() / mt_getrandmax();
$u2 = mt_rand() / mt_getrandmax();
$z0 = sqrt(-2 * log($u1)) * cos(2 * M_PI * $u2);
return $z0 * $stdDev + $mean;
}
$value = normalDistribution(100, 15); // 均值为100,标准差15
注意事项
- 使用
mt_rand()而非rand()以获得更好的随机性 - 对于高精度需求,考虑使用
random_int()(PHP7+) - 权重总和建议不超过
mt_getrandmax()值(通常为2147483647) - 多次测试验证概率分布是否符合预期






