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

时间:2010-05-12 17:37:56

标签: php arrays random unique

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

如果用户没有很多关联用户但是在min之上(如果低于5,则只返回数组),那么由于重复的rand数而导致结果不佳...

如何克服这个问题或从下一个rand()中排除先前选择的兰特数字;功能调用。

以下是完成工作的代码部分。请记住,这必须高效,因为这个脚本随处可见。

$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;

提前致谢! 斯蒂芬

2 个答案:

答案 0 :(得分:3)

最简单的方法是使用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了解您应该使用mt_rand()代替rand()的原因。

答案 1 :(得分:1)

如果您只是要对数组项进行随机播放,请使用shuffle

shuffle($users);
return $users;

请注意,shuffle需要通过引用传递。所以你需要传递一个随后洗牌的变量。