我試圖通過在php中使用rand()函數來從mysql數據庫生成選擇名稱。該程序工作正常,但有可能使結果更隨機,因爲我得到的一些記錄是相同的(每當我清除會話,並重新開始),其他人可能不會被選中。我目前在表格中有91條記錄。在php中生成隨機數
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); – 2012-01-05 11:24:34
而不是從check_existing()返回1和2,爲什麼不簡單地返回布爾值TRUE或FALSE? – 2012-01-05 11:25:48
@MarkBaker:感謝您的建議,我會更新我的代碼。 – user225269 2012-01-05 11:33:22