看板 PHP 關於我們 聯絡資訊
因為自己在寫亂數排座位,且座號不重複,以表格呈現 條件:當輸入人數(欄位text)後,1排7個人會亂數排座位 以下是程式:但發現,座號會重複出現,已用陣列來判斷了,但還是無法解決 還請各位能幫忙指正是哪邊寫錯了。 <?php for ($q=1;$q<=$_POST["text"];$q++) { $student[$q]=0; //一開始先將每位學生的flag設為0 } if ($_POST["text"] % 7==0){ $kk=($_POST["text"] / 7) ;} //若人數剛好被7整除,則有$kk排 else{ $kk=intval($_POST["text"] / 7)+1; //否則取整數+1列 } echo "<table border=1 bordercolor='#000000'>"; //產生表格 for ($i=1;$i<=$kk;$i++) { echo "<tr>"; for ($j=1;$j<=7;$j++) { do { $p=rand(1,$_POST["text"]); //隨機產生1到輸入的人數之間的亂數 }while ($student[$p]!=0); //當此學生出現過flag不等於0則要再產生一次 echo "<td>"; echo $p; $student[$p]=1; //將隨機產生的座號陣列設為1,代表此座號已出現 echo "</td>"; } echo "</tr>"; } echo "</table>"; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.12.34.244
bibo9901:shuffle() 05/05 15:03
itisjoe:假設x人 先用迴圈產生一個array(1,2, ... ,x) 05/05 15:09
itisjoe:再用shuffle()把這個array打亂 之後再依序輸出就好 05/05 15:10
stator:謝謝樓上二位,但我這樣的邏輯寫法有錯嗎?應該是沒錯才對呀 05/05 15:11
tyf99:你的 do-while 100% 會進入無窮迴圈 05/05 15:28
tyf99:更正,沒到100%,是只要總人數非7的倍數就會發生 05/05 15:32
bibo9901:打亂1~$num的順序 => shuffle( range(1, $num ) ) 05/05 15:34
tyf99:我提供另一個方式,比較類似你的原始想法 05/05 15:39
tyf99:一樣產生一個連續的 [1,2,3,..],然後用 array_rand() 取出 05/05 15:39
stator:請教我輸入33人時,最後一排空下的位置,會出現notice: 05/05 15:39
tyf99:取出的元素就 unset 掉. 05/05 15:40
stator:UNDEFINED OFFSET,要怎麼解決會較好呢?希望它就保留空的格 05/05 15:40
wayway2004:array_rand + array_slice 05/05 18:09
liaosankai:range + shuffle + array_chunk 研究看看 05/05 22:02
liaosankai:至於table的輸出,可以參考 #1B3cxpDs 看看 05/05 22:08
lyforever:do 前面加一行 05/09 20:35
lyforever:if($i==$kk && $j > ($_POST["text"]%7) ) break; 05/09 20:35