PHP actions in ratio


PHP actions in ratio

我有3个选项,它们必须以特定的比例出现。在10次中,这是比率:

  • 8x选项1
  • 1x选项2
  • 1x选项3

现在我有以下内容:

if (rand(8,10)) {
    option1();
} elseif (rand(1,10)) {
    option2();
} elseif (rand(1,10)) {
    option3();
} 

但这使选项1出现的次数超过8次。选项2从未出现,选项3很少出现。

那么,实现这一点的正确方法是什么呢?

试试这样做。

$roll = rand(1,10);   
if ($roll == 1) {
    option2();
} elseif ($roll == 2) {
    option3();
} else {
    option1();
} 

如果随机数为1(10%的时间),选项2

如果随机数为2(10%的时间),选项3

如果随机数是其他的(80%的时间),选项1

$r = rand() / getrandmax();
if ($r <= 0.8) {
  option1();
} elseif ($r <= 0.9) {
  option2();
} else {
  option3();
}

不,这不是正确的方法。你可以这样写:

<?php
// Store in DB use of options 1, 2 and 3
//  field     value
// -----------------
//  options1   0
//  options2   0
//  options3   0
// If $options1 = 8, $options2= 1 and $options3 = 1, then clear all values from DB
$random = rand(1,3);
if ($random == 1) {
  if ($options1 < 9) { option1(); } else { // tryagain; }
} elseif (
...

// update DB with new value for used option

对不起,代码有点混乱(if部分),但我想你可以理解。如果您需要完整的代码,请告诉我。