ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php百分比机会

2019-10-08 15:36:42  阅读:215  来源: 互联网

标签:strategy-pattern php probability


这实际上是一个方法问题,但我在php中提出它.

假设我们有一个四个百分比的列表,在迭代时会发生一个给定事件.

array=('walk the dog'=>.25,'read the paper'=>.25,'drink coffee'=>.0,'listen to music'=>.50)

(键只是测试 – 在实践中,这将用于策略模式,使用call_user_func()将不同的方法应用于对象的机会)

在一个循环中,通过随机调整的选择考虑各自的权重来选择其中一个事件的最佳方式是什么(IE,对于这个特定的配置,会听到很多音乐而不是很多咖啡喝)

目前我有类似的东西:

for($i=1;$i<=3;$i++){
  $rand = 1/rand(1,10);
  //choose from the list
}

但这需要将百分比映射到值范围(50-100%变为听音乐​​,0-25%遛狗,25-50读取纸张),因为该迭代的’值’计算为浮点数在0和1之间.这种方式改变了需要记录百分比的方式.

是否有任何一种方法可以保留值的身份,因为它们应该被选择而不是范围?它肯定会使代码更具可配置性,因为我必须使这些值可调.如果我太模糊,请告诉我.

解决方法:

我会这样做:

$arr = array (
    'walk the dog'    =>  array('min' =>  0, 'max' =>  25),
    'read the paper'  =>  array('min' => 25, 'max' =>  50),
    'drink coffee'    =>  array('min' =>  0, 'max' =>   0),
    'listen to music' =>  array('min' => 50, 'max' => 100),
);

$rnd = rand(1,100);
foreach($arr as $k =>$v) {
    if ($rnd > $v['min'] && $rnd <= $v['max']) {
        echo $k,"\n";
    }
}

标签:strategy-pattern,php,probability
来源: https://codeday.me/bug/20191008/1872412.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有