實作不重複隨機數演算法,確保每一組選號符合邏輯規範。
// 【程式碼練習】
// 在此處呈現練習思路及程式碼內容
$lotto=[];
// 1. 初始化空陣列(從零開始)
// 2. 進入迴圈:只要數量少於 6 就重複執行
while(count($lotto)<6){
// count():項目總數
// 隨機取號
$tmp=rand(1,38);
// rand(1, 38): PHP 的隨機數產生。第一個參數 1 是最小值。第二個參數 38 是最大值。
// $tmp:這是一個暫存變數
echo '這是$tmp:' . "$tmp," . '<br>';
if(!in_array($tmp,$lotto)){
// !in_array檢查$tmp是不是已經在$lotto裡面(有沒有重複)
$lotto[]=$tmp;
// 沒有在$lotto[]裡面 就放進去$lotto[]
// 如果寫if(in_array($tmp,$lotto)){
// 如果在裡面就????
// }else{
// $lotto[]=$tmp;
// }
//if ture沒有明確指令在裡面 所以在判斷式加!反轉 不用else
echo nl2br(print_r($lotto, true));
}
}
echo "<hr>";
foreach($lotto as $num){
echo '這是$num' . "$num,";
}
靜態頁不執行 PHP,完整亂數輸出請開啟 12-pra08.php。下方為單次執行示意。
這是$tmp:19,<br>
Array
(
[0] => 19
)
這是$tmp:5,<br>
Array
(
[0] => 19
[1] => 5
)
…(略,直到陣列有 6 個號碼)
────────────────
這是$num19,這是$num5,這是$num…,
【學習重點】
while (count($lotto) < 6),湊滿 6 個號碼才結束。rand(1, 38) 產生一個暫存 $tmp。!in_array($tmp, $lotto) 為真才表示這個號還沒出現過。$lotto[] = $tmp。