有时在我们查找数据库获取符合条件的数据时会需要从中随机抽取几条结果作为让它显示出来,此时可借助 PHP 中的 rand()函数来生成随机数从而取得我们需要的随机显示的数据结果:
/*
* 连接数据库
*/
$db_server="localhost";
$db_user_name="root";
$db_user_password="";
$db_name="fadmin";
$connection=mysql_connect($db_server,$db_user_name,$db_user_password);
$conn=mysql_select_db($db_name, $connection);
/*
* 查询数据获取结果集
*/
$sql = "SELECT * FROM user";
$select = mysql_query($sql);
/*
* 将结果集存入数组
*/
while($tmp = mysql_fetch_assoc($select))
{
$info[] = $tmp;
}
//结果集总数
$result = count($info);
$user_rand_test = array();
//随机显示的数量
$num_test = 4;
if($result > $num_test)
{
for($i = 0; $i < $num_test; $i++)
{
$rand_num = rand(0, $result - 1);
$user_rand_test[] = $rand_num;
}
}
//输出产生的随机数数组
print_r($user_rand_test);
这个方法可以得到我们预期的结果;但是当查询的的结果集总数太少时,就会出现生成相同的随机数,例如查询结果数为6或者5:
//结果集总数
$test_num = 6;
$test_array = array();
//随机显示的数量
$num = 4;
if($test_num > $num)
{
for($i = 0; $i < $num; $i++)
{
$rand_num = rand(0, $test_num - 1);
$test_array[] = $rand_num;
}
}
print_r($test_array)
可能得到以下结果:
怎么解决呢,我们可以利用 continue 、 break 的特性避免生成相同值的随机数,改进生成随机数的操作:
$user_rand = array();
//随机显示的数量
$num = 4;
if($result > $num)
{
for($i = 0; $i < $num; $i++)
{
for($j = 0; $j <= 99; $j++)
{
$rand_num = rand(0, $result - 1);
if(in_array($rand_num,$user_rand))
{
continue;
}
else
{
$user_rand[] = $rand_num;
break;
}
}
}
}
这里是在生成随机数的同时做循环操作并在循环体中用 PHP 中的 inarray() 函数判断生成的随机数的值是否已存在于随机数数组 $user_radn 中,如果存在则不进行赋值,反之进行赋值。
两种方法的结果比较:
生成了随机数数组,我们就可以得到要随机显示的结果数组了,:
$return = array();
for($flag=0; $flag
{
$return[] = $info[$user_rand[$flag]];
}
当然如果数据量相当大的话就不用这么麻烦了,但是总会遇到那么几个特殊的,不是吗?