zblog博客已经全面禁止利有rand()函数进行数据库数据的提取,具体可以查看zblog论坛的《关于全面禁止直接在数据库内使用rand()进行随机读取的公告》这个帖子。不让使用rand()原因就是,rand()不支持mysql以外的数据库,在数据库数据比较多的情况下速度会变得很慢。
在给主题做随机模块的时候就采用了一个迂回的方法,来达到一个随机文章的效果。具体方法记录一下,以备后用。
方法原理:
1、先从数据库中提出一部份数据,加入数组中
2、随机抽取数组中的数据,并显示
代码:
function mochu_rand($num){ global $zbp,$str,$order;$i; $i = $num; $str = ''; $arr = array(); $arand = array(); $order = array('log_ViewNums'=>'ASC'); $where = array(array('=','log_Status','0')); $array = $zbp->GetArticleList(array('*'),$where,$order,array(20),''); $arr = array_rand($array,$i); for($j=0;$j<$i;$j++) { $arand[]=$array[$arr[$j]]; } foreach ($arand as $related) { $str .= "<li><a href=\"{$related->Url}\" title=\"{$related->Title}\" target=\"_blank\">{$related->Title}</a></li>"; } return $str; }
代码中,使用的PHP中的array_rand()函数,用随机获取数组的键名,并不是数据。
代码不是很完美,如果你想使用,还请自己修改一下。