我正在使用PHP。我的目标是订购总积分相同的人。当点为75时,每次执行脚本时,顺序都必须相同。当点数为80或其他值时,顺序必须更改,但每次执行脚本并且总点数为80时,它必须相同。
User ID 258 = Milla
User ID 289 = E-P
User ID 290 = Jari
User ID 449 = Pepe
User ID 633 = Elias
User ID 634 = Virpi
User ID 635 = Jaakko
User ID 636 = Joona
让我们说总分是75。
$total = 75;
# $user_id[0] means first number of $user_id
# for example: if $user_id is 634, then $user_id[0] = 6
$count = $user_id[0] . ($user_id % 2) . ($user_id * 0.33);
$number = bcdiv("$total", "$count", 16);
list($temp, $number) = explode(".", "$number");
$number = ($number % $user_id) . $number;
当我为每个人使用此代码并按$number
(即字符串)对其进行排序时,降序将为:
E-P
Joona
Elias
Jari
Jaakko
Pepe
Milla
Virpi
我希望脚本尽可能公平。我的意思是,如果一个人拥有高用户ID,他的所有总积分都不应该比用户ID较低的人更好。
你怎么看?我应该改进代码吗?或者每个人都在同一条线上并在总点数改变时平等对待? 噢,是的,还有一件事。脚本需要尽快运行。如果您有想法,请随时告诉我。更新
我最终使用了这种代码:
$total = 75;
$user_id = 258;
$count = $user_id * 0.33;
$number = bcdiv("$total", "$count", 16);
list($temp, $number) = explode(".", "$number");
$number[0] = $number[10]; # get 10th number to 1st number
如果有方法可以优化它,我想听听。感谢。
答案 0 :(得分:3)
如果您为随机数生成器播种,则随机性将基于种子相同。这将始终生成相同的混洗数组:
$total = 75;
srand($total);
shuffle($user_id);
然后,如果您设置$total = 80
,您将获得一个不同的混洗数组,但在$total = 80
时它将始终相同。