Я хочу создать скрипт Bingo. Я уже закодировал шаблон 6x6 со случайными числами, которые имеют определенный диапазон в каждой строке. НО теперь он выводит одно и то же число несколько раз, я хочу, чтобы это были случайные числа, может кто-нибудь помочь мне?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Indzendopdracht 051R3</title>
</head>
<body>
<?PHP
function printBingocard(){
$bingoNumbers = array(
"rij_1" => array(10,11,12,13,14,15,16,17,18,19),
"rij_2" => array(20,21,22,23,24,25,26,27,28,29),
"rij_3" => array(30,31,32,33,34,35,36,37,38,39),
"rij_4" => array(40,41,42,43,44,45,46,47,48,49),
"rij_5" => array(50,51,52,53,54,55,56,57,58,59),
"rij_6" => array(60,61,62,63,64,65,66,67,68,69)
);
$rand_keys = array_rand($bingoNumbers, 1);
$rows = array();
foreach($bingoNumbers["rij_1"] as $bn_rij1){
if($bn_rij1 > 10 && $bn_rij1 <= 16){
$rows["row1"][]="<td>" . $bingoNumbers["rij_1"][array_rand($bingoNumbers["rij_1"])] ."</td>";
}
}
foreach($bingoNumbers["rij_2"] as $bn_rij2){
if($bn_rij2 > 20 && $bn_rij2 <= 26){
$rows["row2"][]="<td>" . $bingoNumbers["rij_2"][array_rand($bingoNumbers["rij_2"])] ."</td>";
}
}
foreach($bingoNumbers["rij_3"] as $bn_rij3){
if($bn_rij3 > 30 && $bn_rij3 <= 36){
$rows["row3"][]="<td>" . $bingoNumbers["rij_3"][array_rand($bingoNumbers["rij_3"])] ."</td>";
}
}
foreach($bingoNumbers["rij_4"] as $bn_rij4){
if($bn_rij4 > 40 && $bn_rij4 <= 46){
$rows["row4"][]="<td>" . $bingoNumbers["rij_4"][array_rand($bingoNumbers["rij_4"])] ."</td>";
}
}
foreach($bingoNumbers["rij_5"] as $bn_rij5){
if($bn_rij5 > 50 && $bn_rij5 <= 56){
$rows["row5"][]="<td>" . $bingoNumbers["rij_5"][array_rand($bingoNumbers["rij_5"])] ."</td>";
}
}
foreach($bingoNumbers["rij_6"] as $bn_rij6){
if($bn_rij6 > 60 && $bn_rij6 <= 66){
$rows["row6"][]="<td>" . $bingoNumbers["rij_6"][array_rand($bingoNumbers["rij_6"])] ."</td>";
}
}
echo "<table>";
foreach($rows as $row){
echo "<tr>";
foreach($row as $r){
echo $r;
}
echo "</tr>";
}
echo "</table>";
}//END OF FUNCTION
printBingocard();
?>
</body>
</html>
Почему бы просто не использовать shuffle()
? Как сейчас, вы никогда не проверяете, что array_rand()
создает дублирующее число, так что да, вы обманываете.
Это намного эффективнее:
foreach(array_keys($bingoNumbers) as $key) {
shuffle($bingoNumbers[$key]);
}
Один цикл SINGLE, и каждый из этих вспомогательных массивов перетасовывается, без дубликатов, гораздо намного меньше кода.
$bingoNumbers = array(
"rij_1" => array(10,11,12,13,14,15,16,17,18,19),
"rij_2" => array(20,21,22,23,24,25,26,27,28,29),
"rij_3" => array(30,31,32,33,34,35,36,37,38,39),
"rij_4" => array(40,41,42,43,44,45,46,47,48,49),
"rij_5" => array(50,51,52,53,54,55,56,57,58,59),
"rij_6" => array(60,61,62,63,64,65,66,67,68,69)
);
foreach(array_keys($bingoNumbers) as $key)
shuffle($bingoNumbers[$key]);
echo "<table border='1'>";
foreach($bingoNumbers as $v)
echo "<tr><td>" . implode("</td><td>", $v) . "</td></tr>";
echo "</table>";
Если вам нужна только сетка 6x6, просто array_slice()
ваши вспомогательные массивы, например
$bingoNumbers = array(
"rij_1" => array(10,11,12,13,14,15,16,17,18,19),
"rij_2" => array(20,21,22,23,24,25,26,27,28,29),
"rij_3" => array(30,31,32,33,34,35,36,37,38,39),
"rij_4" => array(40,41,42,43,44,45,46,47,48,49),
"rij_5" => array(50,51,52,53,54,55,56,57,58,59),
"rij_6" => array(60,61,62,63,64,65,66,67,68,69)
);
foreach(array_keys($bingoNumbers) as $key)
shuffle($bingoNumbers[$key]);
echo "<table border='1'>";
foreach($bingoNumbers as $v)
echo "<tr><td>" . implode("</td><td>", array_slice($v, 0, 6)) . "</td></tr>";
//^^^^^^^^^^^^ Just slice your sub array
echo "</table>";
array_shuffle()
на shuffle()
и его код работает отлично