Dra*_*sil 11 php arrays random percentage
我知道这个问题可能已被提出,但我不清楚先前的问题是否足以知道他们是否按照我的意愿行事.
$fruits = array('20' => 'apple', '40' => 'orange', '40' => 'pear');
Run Code Online (Sandbox Code Playgroud)
关键是获取价值的机会的百分比.我想mt_rand()一个0到99之间的数字,并根据这些百分比从$ fruits返回一个值.
很可能我很困惑,因为我不知道如何解释我在寻找什么.
提前感谢您的帮助.
编辑:根据这些机会,想要来自$ fruits的随机值:
我希望有40%的机会获得橘子,40%的机会获得梨,80%的机会获得苹果.
编辑:为了进一步澄清,由于很多答案都错了,(或者我只是不理解他们的代码),无论我选择什么号码,我都需要一个结果,而不仅仅是20,40或40.
dot*_*hen 16
首先,你的数组只有两个项目(苹果和梨),因为梨由于具有相同的键而覆盖橙色.所以使用相反的顺序.另外,不要在整数周围加上引号:
$fruits = array('apple' => 20, 'orange' => 40, 'pear' => 40);
Run Code Online (Sandbox Code Playgroud)
你应该选择一个随机数,然后比较数组的每个权重加上之前权重的总和,直到得到一个匹配:
$rand = rand(1,100);
$sum = 0;
$chosenFruit;
foreach ($fruits as $f=>$v) {
$sum += $v;
if ( $sum >= $rand ) {
$chosenFruit = $f;
break;
}
}
echo "We have chosen the {$chosenFruit}!";
Run Code Online (Sandbox Code Playgroud)
您甚至可以通过100
使用$ fruits数组值的计算总和替换rand()函数中的值来使该过程更具弹性.
我认为这样的事情会做你想要的:
$fruits = array('apple' => '20', 'orange' => '40', 'pear' => '40');
$newFruits = array();
foreach ($fruits as $fruit=>$value)
{
$newFruits = array_merge($newFruits, array_fill(0, $value, $fruit));
}
$myFruit = $newFruits[array_rand($newFruits)];
Run Code Online (Sandbox Code Playgroud)
这将创建一个array($newFruits
),它是一个包含100个元素的数字索引数组.其中20个元素是"苹果",40个是"橙色",40个是"梨".然后我们从该数组中选择一个随机索引.100分中的20分你将获得"苹果",100分中的40分你将获得"橙色",而100分中的40分你将获得"梨".