![]() |
Jag ska få fram fem olika tal mellan 1 och 29. Dvs ett tal får inte förekomma två gånger.
Använder nu följande metod. Men den känns lite krånglig. Finns det någon bättre variant? $first = rand(1,29); do { $second = rand(1,29); } while($first==$second); do { $third = rand(1,29); } while($third==$first || $third==$second); do { $fourth = rand(1,29); } while($fourth==$first || $fourth==$second || $fourth==$third); do { $fifth = rand(1,29); } while($fifth==$first || $fifth==$second || $fifth==$third || $fifth==$fourth); |
1 - skapa en array med de olika värdena i
kör rand() på arrayen |
Citat:
Det var exakt något sådant jag letade efter! Tack så mycket! |
Tänkte jag kunde bidra med min färdiga kod:
$input = array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29"); $rand_keys = array_rand($input, 5); print $input[$rand_keys[0]]; print $input[$rand_keys[1]]; print $input[$rand_keys[2]]; print $input[$rand_keys[3]]; print $input[$rand_keys[4]]; |
<pre>
<?php $array = array(); for ($i=0; $i < 5; $i++) { do { $num = mt_rand(1,29); } while (in_array($num, $array)); $array[] = $num; } print_r($array); ?> </pre> |
Citat:
Den varianten tar en tredjedel kortare tid! Variant 1 tid: 0.00029587745666504 Variant 2 tid: 0.00020003318786621 Någon som har ännu bättre idé? (vi kanske ska starta en tävling här?) |
Tidsskillnaden beror nog främst på att du kör print fem gånger i den första varianten, och bara ett enda print_r i den andra.
|
Mitt bidrag:
Kod:
$map=array(); Kod:
$randomNumbers = array(); // storage array |
Mitt förslag:
Kod:
$array = range(1,29); |
Citat:
|
Alla tider är GMT +2. Klockan är nu 01:25. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson