【发布时间】:2013-03-12 06:12:50
【问题描述】:
我正在尝试找出一种方法来让特定的数组项在一定百分比的时间内被选中。所以让我们说:
$testArray = array('item1', 'item2', 'item3', 'item4', 'item5');
现在我将如何选择 item1 让我们说 40% 的时间。我知道这可能真的很容易,但我今天似乎无法理解它。
【问题讨论】:
我正在尝试找出一种方法来让特定的数组项在一定百分比的时间内被选中。所以让我们说:
$testArray = array('item1', 'item2', 'item3', 'item4', 'item5');
现在我将如何选择 item1 让我们说 40% 的时间。我知道这可能真的很容易,但我今天似乎无法理解它。
【问题讨论】:
这些百分比:
$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_keys 和array_combine)【讨论】: