每次隨機取出一個數(shù)之后,應(yīng)該刪除這個數(shù),才可以保證下次不取到它。例如你的100個數(shù),第一次隨機取一個,然后刪除它,下次再剩余的99里面隨機取一個,這樣就不會重復(fù)了。
霞浦ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
寫代碼沒難度了吧,你寫寫看,如果希望我繼續(xù)回答,建議你粘貼一下你寫的內(nèi)容,不完整或者錯誤沒關(guān)系,至少你去思考了的,而且我看了代碼知道你錯在哪里,才可以針對性的講解。
沒空等你寫代碼了,我把我的貼出來,今天晚上要熬夜加班,沒空回來看帖子了,不好意思,希望你認真學(xué)習。
?php
$arr=array();
for ($i=1;$i=100;$i++) array_push($arr,$i);
print_r($arr);
for ($i=1;$i=100;$i++){
$n=rand(0,count($arr)-1);//產(chǎn)生隨機數(shù),最小值是0,最大值是數(shù)組剩余元素可數(shù)-1
echo $arr[$n]," ";//顯示取的隨機數(shù)
array_slice($arr,$n,1);//刪除剛才取到的數(shù)
}
?
直接用select * from student order by rand() limit 5不是一個很好的習慣,這個要考慮到數(shù)據(jù)庫的大小問題,比如,數(shù)據(jù)量為10W以上,這樣查詢的效率是非常低的,資源也消耗挺多!你可以考慮在php與mysql結(jié)合來實現(xiàn),比如:先用mysql 的count()計算出student的總條數(shù)$sum_num,賦值到php中的變量中,后在php中更具這個總條數(shù)進行生成隨機數(shù)(這里涉及到你的5條數(shù)據(jù)是否為連續(xù)的5條隨機數(shù),還是打亂的隨機五條),這里如果生成連續(xù)的數(shù)據(jù)就只需要生成一個小于$sum_num-5的隨機數(shù)就可以了!根據(jù)這個隨機數(shù)進行l(wèi)imit取出5條就可以;如果這里需要生成打亂的隨機數(shù),就需要生成5個不相同的并且小于$sum_num隨機數(shù),最后根據(jù)這些隨機數(shù)在數(shù)據(jù)庫中查詢,第一種情況用到limit 隨機數(shù),5;;第二種情況用到in(隨機數(shù)1,隨機數(shù)2,隨機數(shù)3,隨機數(shù)4,隨機數(shù)5);在數(shù)據(jù)量大的情況下,這樣的效率和資源消耗的情況下都要比select * from student order by rand() limit 5好得多,當然如果數(shù)據(jù)量不多的話就用這個也可以!只是給你普及個知識!祝你學(xué)習愉快!(這里暫且認為你會用php生成隨機數(shù)并且這里的php生成的隨機數(shù)必須為大于0的整型哦,不會的話可以先百度、google,最后可以繼續(xù)給我留言)!
這里因為你的id會有缺失所以有的方法不適用!就不一一列舉了!
首先告訴你,樓上有的人說的不對,array_rand()函數(shù)返回的是數(shù)組的鍵值,即以下代碼:
$a = array("aaaaa","bbbbb","ccccc","ddddd","eeeee");
$b = array_rand($a);
echo $b;
他們隨機返回的是0,1,2,3,4中的任意一個數(shù)字。
當然,如果將$a改成$a = array("aaaaa"="隨便什么","bbbbb"="隨便什么","ccccc"="隨便什么","ddddd"="隨便什么","eeeee"="隨便什么");則可以達到目的。
--------------------------------------------------------------------------------------
再談?wù)劻硪环N方法:shuttle()函數(shù)把數(shù)組中的元素按隨機順序重新排列。
$a = array("aaaaa","bbbbb","ccccc","ddddd","eeeee");
shuttle($a);
echo $a[0];
這種方法可成功達到目的,但應(yīng)注意數(shù)組的鍵值!shuttle()函數(shù)為數(shù)組中的單元賦予新的鍵名。這將刪除原有的鍵名而不僅是重新排序。所以不論原來數(shù)組的鍵值是什么,重新排序后鍵值已經(jīng)發(fā)生改變,所以echo $a[0];中的0不能寫成以前數(shù)組的鍵值(當然其他數(shù)字也可以,只要不超過數(shù)組長度即可)
/**
* MySQL 隨機取記錄
*
* @param $t 表
* @param $c ID列,默認為id
* @param $n 取多少個
* @param $w 條件語句
* @param $f bool 是否強制以多維數(shù)組形式返回,默認false
* @return array 取1個直接返回結(jié)果數(shù)組(除非$f為true),取1個返回多維數(shù)組,用foreach取出
*/
function rand_row($t , $c = 'id' , $n = '1', $w = '' , $f = false) {
$m=new mysqli(mysqli信息,自行查找php文檔);
if (!empty($w)) {
$w = ' AND '.$w;
}
$sql = "SELECT * FROM `{$t}` WHERE {$c} = (SELECT floor(RAND() * (SELECT MAX({$c}) FROM `{$t}`))) {$w} ORDER BY {$c} LIMIT {$n};";
$xq = $m-query($sql);
$r = array();
while ($x = $m-fetch_array($xq)) {
$r[] = $x;
}
if ($f == false count($r) == 1) {
return $r[0];
} else {
return $r;
}
}
array_rand()
在你想從數(shù)組中取出一個或多個隨機的單元時相當有用。它接受
input
作為輸入數(shù)組和一個可選的參數(shù)
num_req,指明了你想取出多少個單元
-
如果沒有指定,默認為
1。
如果你只取出一個,array_rand()
返回一個隨機單元的鍵名,否則就返回一個包含隨機鍵名的數(shù)組。這樣你就可以隨機從數(shù)組中取出鍵名和值。
主要是用array_rand()方法
php里面有array_rand函數(shù),你要是一道題一道題的讀出來,或許也可以嘗試一下。但是要是一下子都讀出來,即便這個函數(shù)效率可以的話,隨機取出id數(shù)組,查詢 “where id in 數(shù)組” 就不如直接在數(shù)據(jù)庫里隨機抽取記錄。\x0d\x0a如何從數(shù)據(jù)表里隨機抽取記錄呢,想想辦法還是有一些,就是不知道效率如何。有的是說用max_id*rand(),那一條一條抽取還是可以的。怎么批量隨機抽取呢,可以試著排序,然后選取前500題,排序可以想辦法用一些函數(shù)(選取一些執(zhí)行效率高的),如何md5,sha1,這種。如果為了使結(jié)果更具有隨機性,可以把字段值再與一個隨機數(shù)運算一下。僅供參考。\x0d\x0a========================\x0d\x0a我想你還是用array_rand隨機抽500個id存到數(shù)組,然后遍歷數(shù)組吧。這樣也避免了題目重復(fù)。在數(shù)據(jù)庫里如果一次一條記錄隨機抽取,要考慮碰巧重復(fù)的問題。批量選取你就按上面我說的試試。
新聞名稱:php7數(shù)據(jù)庫隨機選取 php隨機取出數(shù)組元素
地址分享:http://jinyejixie.com/article22/hpdpcc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、做網(wǎng)站、域名注冊、網(wǎng)站策劃、微信公眾號、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)