试图rand()而不重复

时间:2012-08-04 00:33:26

标签: php random

我有用于rand(); 我需要从1到数量rand 4次,并确保该值不会返回。

这是我的代码:

 $Count = 15;
 $secondstage = '';
 $arrayindex = '';
 for($i=1; $i<5; $i++){
    $arrayindex = rand(1,$Count);
    if($secondstage == $arrayindex){
        for($b=1; $arrayindex == $secondstage; $b++){
            $arrayindex = rand(1,$Count);
        }
    }
    $secondstage = $arrayindex;
    echo $secondstage;
    echo '<br>';
 }

我在这里有一些逻辑错误吗?我想也许可以使用,但也应该工作。

4 个答案:

答案 0 :(得分:2)

所以基本上你想要1到15之间的4个随机非重复数字,包括?你使用的代码太多了。更简单的版本:

$numbers = array();
do {
   $possible = rand(1,15);
   if (!isset($numbers[$possible])) {
      $numbers[$possible] = true;
   }
} while (count($numbers) < 4);
print_r(array_keys($numbers));

答案 1 :(得分:1)

我会把已经随机的数字放在一个数组中:

<?php 
$count = 15;
$cArray = array();
for($i=1; $i<5; $i++){
    $rand = rand(1, $count);
    if(in_array($rand, $cArray)){
        $i--;
    } else {
        $cArray[] = $rand;
        echo $rand . "<br>";
    }
   }
?>

我查了一下,这段代码在本地服务器上运行:)

答案 2 :(得分:1)

$count = 15;
$values = range(1, $count);
shuffle($values);
$values = array_slice($values, 0, 4);

答案 3 :(得分:0)

你可以这样做(它将为你提供一个包含原始数组随机键的数组):

<?php

$array = array();
$max = 100;
$numberValuesWanted = 5;

for($i = 0; $i < $max; $i++)
  $array[] = $i;

$randomKeys = array_rand($array, $numberValuesWanted);

print_r($randomKeys);