一个或多个数组的加权洗牌?
使用嵌套数组中的权重对一个或多个数组进行混洗的好算法是什么?
示例:
$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) 选择的数组,但我不认为我在正确的轨道...
What is a good algorithm that shuffles an array or arrays using weights from the nested arrays?
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)
);
I want the array randomly shuffled but I want the rank
value to be a weight. So those with a low number rank are more likely to be at the top of the list.
I've experimented with a few things, like iterating through the array and pulling out arrays chosen using mt_rand(mt_rand(0,$value),$value)
but I don't think I'm on the right track...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我能够像这样解决这个问题:
I was able to solve this problem like so:
你可以尝试这样的事情:
You can try something like this:
由于这个问题首先在谷歌上搜索 php array Weighted shuffle 时出现,并且接受的答案无法解决它 - 这是基于我发现的某些算法的解决方案。
相当快(对于 PHP),概率分布也经过测试并且正确
Since this question is first on google while searching php array weighted shuffle and accepted answer doesn't solve it - here is the solution, based on some algorithm i found.
Pretty fast (for PHP), probability distribution is also tested and correct