兰德();排除并已经随机生成的数字..?

发布于 2024-09-01 11:34:25 字数 519 浏览 3 评论 0原文

我有一个函数可以从表中调用与用户关联的用户。然后该函数使用 rand();函数从数组中选择 5 个随机选择的用户 ID!...

如果用户没有很多关联用户但高于最小值(如果低于 5,则仅按原样返回数组),那么它会给出不好的结果,因为重复随机数...

如何克服这个问题或从下一个随机数()中排除先前选择的随机数;函数调用。

这是执行该工作的代码部分。请记住,这必须非常高效,因为该脚本到处都在使用。

$size = sizeof($users)-1;
    $nusers[0] = $users[rand(0,$size)];
    $nusers[1] = $users[rand(0,$size)];
    $nusers[2] = $users[rand(0,$size)];
    $nusers[3] = $users[rand(0,$size)];
    $nusers[4] = $users[rand(0,$size)];

    return $nusers;

提前致谢! 斯特凡

I have a function which calls a users associated users from a table. The function then uses the rand(); function to chose from the array 5 randomly selected userID's however!...

In the case where a user doesnt have many associated users but above the min (if below the 5 it just returns the array as it is) then it gives bad results due to repeat rand numbers...

How can overcome this or exclude a previously selected rand number from the next rand(); function call.

Here is the section of code doing the work. Bare in mind this must be highly efficient as this script is used everywhere.

$size = sizeof($users)-1;
    $nusers[0] = $users[rand(0,$size)];
    $nusers[1] = $users[rand(0,$size)];
    $nusers[2] = $users[rand(0,$size)];
    $nusers[3] = $users[rand(0,$size)];
    $nusers[4] = $users[rand(0,$size)];

    return $nusers;

Thanks in advance!
Stefan

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

凉墨 2024-09-08 11:34:25

最简单的方法是使用 array_rand()

$users = range(3, 10); // this is just example data
$nusers = array_rand($users, 5); // pick 5 unique KEYS from $users

foreach ($nusers as $key => $value)
{
  $nusers[$key] = $nusers[$value]; // replace keys with actual values
}

echo '<pre>';
print_r($nusers);
echo '</pre>';

PS:阅读此内容 了解为什么应该使用 mt_rand() 而不是 rand()

The simplest way is to use array_rand():

$users = range(3, 10); // this is just example data
$nusers = array_rand($users, 5); // pick 5 unique KEYS from $users

foreach ($nusers as $key => $value)
{
  $nusers[$key] = $nusers[$value]; // replace keys with actual values
}

echo '<pre>';
print_r($nusers);
echo '</pre>';

PS: Read this to know why you should use mt_rand() instead of rand().

╰◇生如夏花灿烂 2024-09-08 11:34:25

如果您只想打乱数组项,请使用 shuffle

shuffle($users);
return $users;

请注意 shuffle 需要通过引用传递。所以你需要传递一个然后被打乱的变量。

If you just want to shuffle your array items, use shuffle:

shuffle($users);
return $users;

Note that shuffle requires pass by reference. So you need to pass a variable that’s is then shuffled.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文