為什麼這篇PHP 二維陣列鄉民發文收入到精華區:因為在PHP 二維陣列這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者cleanwind (骨傲風清(掛網))看板PHP標題Re: [請益] 求救 亂數發牌時間Thu...
這東西真的有點難度 XD
給你幾個做法!
首先你要有一個陣列姑且叫他 $cardArray[52] 或 $cardArray[4][13]
你可以使用一維,也可以使用二維
一維的陣列將 key(也就是52) 值除以13 取整數當做花色,取餘數 + 1 當點數;
二維的陣列就第一維當作花色,第二維的 key + 1 當點數。
接著你要洗牌,洗牌有兩種方法!
1.直接使用 shuffle ,不過二維陣列不適用。
而且有天你碰到 C C++ C# 你會發現,沒有 Shuffle 可以用。
(而且我相信老師也不是要你這樣寫,當然如果我這樣寫老師說 No
我會和他爭論,不過前提是你要夠了解這個東西 XD)
2.另設個變數 $tmp ,從陣列隨機取一個值出來存進 $tmp
再隨機取另一值丟進剛剛隨機值的位子,最後再把 $tmp 丟回第二個隨機值的位子。
真饒舌,總而言之像是
$tmp = $A;
$A = $B;
$B = $tmp;
可不可以不洗牌?
可以你也可以另取一個陣列,隨便你要叫他什麼,
叫做 $card2Array 好了
然後利用 array_rand() 去隨機取值,
可是這樣可能會取到重複的 value ,怎辦?
$i = 0;
while($i < 20) {
$tmp = array_rand($cardArray);
if(!in_array($tmp,$card2Array)) {
$card2Array[$i] = $tmp;
$i ++;
}
}
以上的方法不管是一維還是二維都可以,
只是二維陣列你可能要先用亂數決定花色再決定點數。
最後再把 $cardArray 發給四個人,怎麼發?
for($i = 0 ; $i < 4 ; $i ++) {
for($j = 0 ; $j < 5 ; $j ++) {
echo $cardArray[$i*4 + $j];
}
}
就這樣發完了!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.168.222