Jak*_*son 5 php arrays random weighted
使用嵌套数组中的权重对一个或多个数组进行混洗的好算法是什么?
例子:
$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)
);
Run Code Online (Sandbox Code Playgroud)
我希望数组随机打乱,但我希望该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);
Run Code Online (Sandbox Code Playgroud)