<?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数组不太对,请各位帮帮忙。
$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数组不太对,请各位帮帮忙。
$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;
$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*/
$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;
而你的 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'];
}
PHP 版本较低么?怎么会都是u呢,较低的版本需要为随机数播种子。
提示错误:
Fatal error: Maximum execution time of 30 seconds exceeded
是 if(in_array($jt[$key]['userid'], $arr)){//去重复 这一行错误提示
用 select userid from phome_enewsmember where groupid=3 order by RAND() limit 10 这种听别人说效率很差,数据一多就慢了, 我其实就是想在这个sql的查询结果中循环出来10个,order by RAND() limit 10 这个应该给去掉,不好意思。 至于array_rand 这个我也不知道是否合适用在这里,只是网上搜索到这么一个函数。 正在研究中
其实楼主的需求,用array_rand()就可以解决了。