$numlenght=23; //数据库记录总数,这不要我交你吧
$n=20;  //你要得到记录的总数
function randnum($numlenght){ 
mt_srand((double)microtime()*1000000); 
$num = mt_rand(1,$numlenght); 
return $num; 
}  $i = 1;
while ($i<=20){ 
  $randtest=randnum($numlenght);
$char = $randtest; 
echo $char."<br>"; 
$i++;
}

解决方案 »

  1.   

    这个是个原型,直接可以写成一个函数,完整的函数应该是不能重复的出现,我没有放上来!我觉得这些都是些基本东西,你应该可以搞定,如果不行,多看些书,C语言就OK了!
      

  2.   

    不行啊,还有一个问题,
    根据上面的函数产生的随机数,虽然是在1和$numlenght之间产生的,但是有重复的啊,我这里不能产生重复的:(
    请大虾继续指教
      

  3.   

    $sql = "select * from yourtable order by rand(),id limit 10";随机去出10条记录
      

  4.   

    $numlenght=23; //数据库记录总数,这不要我交你吧
    $IDArr=array();
    //这里省去了向$IDArr中添加元素的代码
    $n=20; 
    $i = 1;
    $nowIDArr=array(); //存放已经取出的ID
    while ($i<=20){ 
    $randtest=randnum($numlenght);
    if(!in_array($IDArr[$randtest],$nowIDArr)){
    array_push($nowIDArr,$IDArr[$randtest]);
    $i++;
    }
    }
    function randnum($numlenght){ 
    mt_srand((double)microtime()*1000000); 
    $num = mt_rand(1,$numlenght); 
    return $num; 

      

  5.   

    $i = 1;
    $randtest=randnum($num);
    $char[$i]=$randtest;
    while ($i<10)

    $j = 1;
    $ttag=0;

    while($ttag==0)
    {
      $randtest=randnum($num);
      while($j<=$i)
      {
      if(strcmp($char[$j],$randtest)!=0)
      {
      $j++;
      }
      if(strcmp($char[$j],$randtest)==0)
      {
      break;
      }
      }
      if($j>$i) 
      {
      $ttag=1;
      }
      }
      if($ttag=1)
      {
      $i++;
    $char[$i]= $randtest; 
    echo $char[$i]; 
    echo "<br>";

    }
    }大家帮看看,好象有BUG,有时候会产生2个重复的数字,而且循环太多,应该如何改善程序呢
      

  6.   

    你写的算法很有问题,SERVER消耗太多资源,要优化。本身我写的就可以解决了,只需要你添加一行代码就可以剔除重复了,在仔细想一下,不懂看下C语言!