博客小子:记录我们对互联网和生活的探索! 注册 | 登陆

php从数组中按照一定比例随机取一个元素

Tags: php, 数组, 比例, 随机, 元素

简单的说我有一个数组,我要按照一定的比例(或者交权重)随机取,比如下面这个数组

$a=array(
 'a'=>1,
 'b'=>5,
 'c'=>9,
 'd'=>3      
);

我要按照数值大小(1,5,9,3)的比例随机取一个元素出来,那$a['c']这个元素应该是最多比取到的,$a['a']是最少被取到的。

www.blogguy.cn原创内容,转载请保留出处:blogguy.cn

比较笨的办法,我还没有想到比较好的,代码如下:

<?

/****************

www.blogguy.cn 原创内容,转载请注明出处

****************/
$a=array(
 'a'=>1,
 'b'=>5,
 'c'=>9,
 'd'=>3      
);
$array_keys=array_keys($a);
$array_a=$a;
$sum=array_sum($a);
$rand=rand($a[$array_keys[0]], $sum);

$i=0;
$next=current($array_a);
$skeys=1;
foreach ($a as $key => $value) {
  //是不是第一个元素
  if($skeys==1 && $rand<=$value){
   $skey=$array_keys[0];
   break;
  }
    $i=$i+$value;
    $next=$next+next($array_a);
    if( ($i <= $rand) && ($rand <= $next)){
     $skey=$array_keys[$skeys];
     break;
    }
    $skeys++;
}
var_dump($skey);

?>

如果你有好的思路,请共享一下。

Tags: php, 数组, 比例, 随机, 元素

« 上一篇:mysql小备忘:如何记录长时间执行的sql语句 | 下一篇:debian添加大内存支持 »

只显示10条记录相关文章

Trackbacks

点击获得Trackback地址,Encode: UTF-8

发表评论

评论内容 (必填):