一个或多个数组的加权洗牌?

2024-02-17

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

Example:

$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)
);

我想要数组随机洗牌,但我想要rank值作为权重。因此,那些数字排名较低的人更有可能位于列表的顶部。

我已经尝试了一些事情,例如迭代数组并提取使用选择的数组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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一个或多个数组的加权洗牌? 的相关文章

随机推荐