PHP的比例

时间:2011-04-29 13:10:02

标签: php

我有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很少发生。

那么,实现这个目标的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

尝试这样的事情。

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

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

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

如果随机数是其他任何东西(80%的时间),则选项1。

答案 1 :(得分:0)

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

答案 2 :(得分:-2)

不,这不是正确的方法。你可以使用类似的东西:

<?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部分),但我想你可以理解。如果您需要整个代码,请告诉我。