2

我试图找出一种方法来让特定的数组项在一定百分比的时间内被选中。所以让我们说:

$testArray = array('item1', 'item2', 'item3', 'item4', 'item5');

现在我将如何选择 item1 让我们说 40% 的时间。我知道这可能真的很容易,但今天我似乎无法理解它。

4

1 回答 1

3

使用这些百分比:

$chances = array(40,15,15,15,15);

选择 1 到 100 之间的随机数:

$rand = rand(1,100);

并选择相应的数组项:

| item1              | item2  | item3  | item4  | item5  |
0                   40       55       70       85       100
$ref = 0;
foreach ($chances as $key => $chance) {
    $ref += $chance;
    if ($rand <= $ref) {
        return $testArray[$key];
    }
}

更通用解决方案的可能改进:

  • array_sum()改为使用100
  • 确保$chances与输入数组具有相同的键(即使用array_keysand array_combine
于 2013-03-12T06:27:25.487 回答