【发布时间】:2012-01-05 11:17:47
【问题描述】:
我正在尝试使用 php 中的 rand() 函数从 mysql 数据库中生成选择名称。该程序运行良好,但是否可以使结果更加随机,因为我得到的一些记录是相同的(每当我清除会话并重新开始时),而其他记录可能不会被选中。我目前在表中有 91 条记录。
if(!isset($_SESSION['max'])){
$max = $db->get_var("SELECT COUNT(*) FROM tbl_participants");
$_SESSION['max'] = $max;
}else{
$max = $_SESSION['max'];
}
if(!empty($_GET['clear'])){
$_SESSION['used_up'] = Array();
$_SESSION['names'] = Array();
}
//print_r($_SESSION['used_up']);
$current_number = rand(0, $max);
$exists = check_existing($current_number, $_SESSION['used_up']);
if($exists == 2){
$_SESSION['used_up'][] = (int)$current_number;
$name = $db->get_var("SELECT participant FROM tbl_participants WHERE participant_id='$current_number'");
$_SESSION['names'][] = $name;
foreach($_SESSION['names'] as $k=>$v){
echo '<li>'.$v.'</li>';
}
}
function check_existing($item, $array){
if(in_array($item, $array)){
return 1;
}else{
return 2;
}
}
【问题讨论】:
-
第一个错误:$current_number = rand(0, $max);需要 $current_number = rand(0, $max-1);甚至更好 $current_number = mt_rand(0, $max-1);
-
与其从 check_existing() 返回 1 和 2,不如简单地返回一个布尔值 TRUE 或 FALSE?
-
@MarkBaker:感谢您的建议,我会更新我的代码。
标签: php