PHP并在使用相同数据时随机排序,但始终保持相同的顺序

时间:2017-06-22 19:38:02

标签: php math

我正在使用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

如果有方法可以优化它,我想听听。感谢。

1 个答案:

答案 0 :(得分:3)

如果您为随机数生成器播种,则随机性将基于种子相同。这将始终生成相同的混洗数组:

$total = 75;
srand($total);
shuffle($user_id);

然后,如果您设置$total = 80,您将获得一个不同的混洗数组,但在$total = 80时它将始终相同。