小弟要做一考试系统,要从试题表exam_stb中,随机出n道试题(不能重复),求一函数能实现
如:function f($m,$n){
...
}
$m=array("1","3","2","8");
$n=3;
$t=f($m,$n);希望$t 为array("1","2","3")或 array("1","2","8") 等等望哪位大哥能帮帮小弟啥。

解决方案 »

  1.   

    试题表如果不大,可以直接 orderby rand() limit 10之类的。
    如果表记录数很大,那么建议查处最小ID和最大ID,随机挑选出N个ID,然后用 in(...)查询,当然,有断记录可以再做判断。
      

  2.   

    每次只返回一组组合就行了?
    $m=array("1","3","2","8");
    $n=3;
    $t=f($m,$n); 
    function f($m,$n)
    {
    if($n > count($m)) return $m;
    else
    {
    shuffle($m);
    return array_slice($m,0,$n);
    }
    }
    print_r($t);
      

  3.   

    array_rand() 在你想从数组中取出一个或多个随机的单元时相当有用。它接受 input 作为输入数组和一个可选的参数 num_req,指明了你想取出多少个单元 - 如果没有指定,默认为 1。 如果你只取出一个,array_rand() 返回一个随机单元的键名,否则就返回一个包含随机键名的数组。这样你就可以随机从数组中取出键名和值。 
      

  4.   

    array array_slice ( array array, int offset [, int length [, bool preserve_keys]] )
    array_slice() 返回根据 offset 和 length 参数所指定的 array 数组中的一段序列。