私は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); –
check_existing()から1と2を返すのではなく、単にブール値TRUEまたはFALSEを返さないのはなぜですか? –
@ MarkBaker:提案をいただきありがとうございます。私は自分のコードを更新します。 – user225269