十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
echo "方法一:";
创新互联公司专注于卓尼企业网站建设,响应式网站开发,商城网站建设。卓尼网站建设公司,为卓尼等地区提供建站服务。全流程定制设计,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务
echo "br\n";
$str = "李一,李二,李三,李四,王一,王二,王三,王四,张一,张二,张三,张四"; //某id下的名字字段的全部文字内容,设为变量$str
$temp = explode(",", $str); //以逗号拆分字符串$str,变成数组$temp
$result = array(); //最终数组,先初始化下
for($i=0;$i4;$i++){ //循环4次取随机名字
$key = rand(0, count($temp)-1);//获取随机数
$result[] = $temp[$key];//通过随机数找到$temp数组中的值,即随机的名字,赋值给$result数组
unset($temp[$key]); //把刚才取出的名字从$temp数组中删除
sort($temp); //从新排列下$temp数组的顺序,使其键值还是从0开始,为下次循环做准备
}
echo "结果为:";
echo "br\n";
print_r($result);
echo "br\n";
echo implode(",", $result);
echo "br\n";
echo "br\n";
echo "方法二:";
echo "br\n";
$str = "李一,李二,李三,李四,王一,王二,王三,王四,张一,张二,张三,张四"; //某id下的名字字段的全部文字内容,设为变量$str
$temp = explode(",", $str); //以逗号拆分字符串$str,变成数组$temp
$rand_key = array_rand($temp, 4); //从$temp数组中找出4个随机的key值
$result = array(); //最终数组,先初始化下
foreach($rand_key as $val){ //循环4个键值
$result[] = $temp[$val]; //通过键值从temp数组找到对应的内容,即随机的名字,赋值给$result数组
}
echo "结果为:";
echo "br\n";
print_r($result);
echo "br\n";
echo implode(",", $result);
直接用sql随机查询 获取数据 就可以了 SELECT * FROM tablename ORDER BY RAND() LIMIT 10
如果要在这前10条里面随机显示一条,可以存到数组里面,然后随机输出,例如:
$rows=array();
while($row=mysql_fetch_array($res)){
$rows[]=$row;
}
$n=rand(0,9);
echo "a href='bbpress/topic.php?id={$rows[$n][topic_id]}'".$rows[$n][topic_title]."/br"."/a";
如果希望直接在数据库里面随机提取一条记录,那么方法是修改SQL:
select * from ... order by rand() limit 1
用PHP 随机函数
$num = select count(*) from bbs;
$id= mt_rand(1,$num);
然后执行 SQL select user,bbs from `bbs` where id = .$id;
为提高效率 最好别用 mysql的 rand()函数
从数据库读出来的原始数据是资源。还不是数组。
$result = mysql_Query("select * from tb_admin where parid=1")
while($list = mysql_fetch_array($result)){
print_r($list);//这里输出的数组是将原数组拆开来输出。
}
原始的数据结构应是:
array(
[0]=array(
[id]=01
[classname]=我是
[url]=baidu.com
)
[1]=array(
//这里同上,不两累赘
)
)
// 第一种我测试了一下,需要0.5秒
$map = array('id'= array('exp',' = (SELECT FLOOR( MAX(id) * RAND()) FROM `'.C('DB_PREFIX').'custom_reply_news` )'));
$dd = M("custom_reply_news")-where($map)-order('id')-find();
dump($dd);
// 第二种查询时间只有0.01秒
$map = array('id'= array('exp',' = (SELECT floor(RAND() * (SELECT MAX(id) FROM `'.C('DB_PREFIX').'custom_reply_news`)))'));
$dd = M("custom_reply_news")-where($map)-order('id')-find();
dump($dd);
// 第三种加上了MIN(id)的判断。我在最开始测试的时候,就是因为没有加上MIN(id)的判断,结果有一半的时间总是查询到表中的前面几行。
$map = array('id'= array('exp',' = (SELECT floor( RAND() * ((SELECT MAX(id) FROM `'.C('DB_PREFIX').'custom_reply_news`)-(SELECT MIN(id) FROM `'.C('DB_PREFIX').'custom_reply_news`)) + (SELECT MIN(id) FROM `'.C('DB_PREFIX').'custom_reply_news`)))'));
$dd = M("custom_reply_news")-where($map)-order('id')-find();
dump($dd);
// 第四种采用JOIN的语法比直接在WHERE中使用函数效率还要高很多
$dd = M("custom_reply_news t1")-join('(SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `'.C('DB_PREFIX').'custom_reply_news`)-(SELECT MIN(id) FROM `'.C('DB_PREFIX').'custom_reply_news`))+(SELECT MIN(id) FROM `'.C('DB_PREFIX').'custom_reply_news`)) AS id) as t2')
-where("t1.id = t2.id")-order('t1.id')-find();
dump($dd);