<?php
$jt=$empire->fetch1("select userid from phome_enewsmember where groupid=3 order by userid desc limit 10");
$lastid=$jt['userid'];
$randnum=5;        //随机数量
$randids='';
$randdh='';
for($i=1;$i<=$randnum;$i++)
{
        $randids.=$randdh.rand(1,$lastid);        //1为最小ID,$lastid为最大ID
        $randdh=',';
}
?>小弟比较菜。
上面这个是随机调用,数据错误,请问怎么才能让它在查询出来的$jt结果里进行随机?我查到用array_rand,可是好像$jt里查出来的格式和array数组不太对,请各位帮帮忙。

解决方案 »

  1.   

    得到 会员表里 组别是3的 十个随机userid     
      

  2.   

    然后放到$randids 里 就行了
      

  3.   

    $jt=$empire->fetch1("select userid from phome_enewsmember where groupid=3 order by userid desc limit 10");
    $last=count($jt['userid']) - 1;//<-
    $randnum=5;//<-五个
    $randids='';
    for($i=1;$i<=$randnum;$i++)
    {
    $one = array_rand($jt, 1);
    $randids .= ',' . $one['userid'];
    }
    $randids = ltrim($randids, ',');
    echo $randids;
      

  4.   

    不知道你的 fetch1 方法返回的是什么?
      

  5.   

    kyzy_yy_pm 大哥你好,感谢你的热心回复,我试了下你写的代码,发现结果如下。u,u,u,u    都成了u了 
      

  6.   

    //$jt=$empire->fetch1("select userid from phome_enewsmember where groupid=3 order by userid desc limit 10");
    $jt = array(
    array('userid' => 1),
    array('userid' => 2),
    array('userid' => 3),
    array('userid' => 4),
    array('userid' => 5)
    );
    $last=count($jt) - 1;//<-
    $randnum=5;//<-五个
    $randids='';
    for($i=1;$i<=$randnum;$i++)
    {
    $key = array_rand($jt, 1);
    $randids .= ',' . $jt[$key]['userid'];
    }
    $randids = ltrim($randids, ',');
    echo $randids;/*3,4,4,3,5*/
      

  7.   

    回xuzuning 是用var_dump 这个查看吗, 出来的是这个array(2) { [0]=> string(3) "108" ["userid"]=> string(3) "108" } 
      

  8.   

    //$jt=$empire->fetch1("select userid from phome_enewsmember where groupid=3 order by userid desc limit 10");
    $jt = array(
    array('userid' => 1),
    array('userid' => 2),
    array('userid' => 3),
    array('userid' => 4),
    array('userid' => 5)
    );
    $last = count($jt) - 1;
    $randnum = 5;
    $arr = array();
    for($i=1;$i<=$randnum;$i++){
    $key = array_rand($jt, 1);//随机取数组索引
    if(in_array($jt[$key]['userid'], $arr)){//去重复
    --$i;
    continue;
    }
    $arr[] = $jt[$key]['userid'];
    }
    $randids = implode(',', $arr);
    echo $randids;
      

  9.   

    你的需求是
    而你的 sql 是
    select userid from phome_enewsmember where groupid=3 order by userid desc limit 10
    得到的是 userid 较大的 10 个,而较小的永远都不在抽取范围里。有失公允
    SQL 应写作
    select userid from phome_enewsmember where groupid=3 order by RAND() limit 10
    直接取出就可以了至于 array_rand 用法
    比如从 $jt = $empire->fetch1... 随机抽取 5 个
    $ar = array_rand($jt, 5);
    foreach($ar as $k) {
      echo $jt[$k]['userid'];
    }
      

  10.   


    PHP 版本较低么?怎么会都是u呢,较低的版本需要为随机数播种子。
      

  11.   


    提示错误:
    Fatal error: Maximum execution time of 30 seconds exceeded 
    是     if(in_array($jt[$key]['userid'], $arr)){//去重复 这一行错误提示
      

  12.   


    用  select userid from phome_enewsmember where groupid=3 order by RAND() limit 10  这种听别人说效率很差,数据一多就慢了,  我其实就是想在这个sql的查询结果中循环出来10个,order by RAND() limit 10 这个应该给去掉,不好意思。 至于array_rand 这个我也不知道是否合适用在这里,只是网上搜索到这么一个函数。  正在研究中
      

  13.   

    对,order by RAND()这种用法效率比较低,建议全部取出来再去随机数。
    其实楼主的需求,用array_rand()就可以解决了。
      

  14.   

    查到了,是我的cms的问题,这么写  array_rand($jt, 1);  是正确的