编程语言
首页 > 编程语言> > php – 数组或数组的加权Shuffle?

php – 数组或数组的加权Shuffle?

作者:互联网

使用嵌套数组中的权重对一个或多个数组进行混洗的好算法是什么?

例:

$array = array(
  array("name"=>"John", "rank"=>3),
  array("name"=>"Bob", "rank"=>1),
  array("name"=>"Todd", "rank"=>8),
  array("name"=>"Todd", "rank"=>14),
  array("name"=>"Todd", "rank"=>4)
);

我希望数组随机改组,但我希望等级值为权重.因此,排名较低的人更有可能位列榜首.

我已经尝试了一些东西,比如遍历数组并拉出使用mt_rand(mt_rand(0,$value),$value)选择的数组,但我不认为我走在正确的轨道上……

解决方法:

我能够像这样解决这个问题:

function compare($a, $b)
{
  $share_of_a = $a['rank'];
  $share_of_b = $b['rank'];
  return mt_rand(0, ($share_of_a+$share_of_b)) > $share_of_a ? 1 : -1;
}

usort($array, "compare"); // Sort the array using the above compare function when comparing
$array = array_reverse($array);

标签:php,arrays,random,weighted
来源: https://codeday.me/bug/20190530/1184330.html