Mitenkäs saisin PHP:n arpomaan nelinumeroisen koodin lukujen 3600-7499 väliltä?
<?php $luku = mt_rand(3600, 7499); ?>
Kiitos.
Mitenkä tuon saisi vielä niin, ettei mikään numero olisi yli 7?
Vaikkapa näin:
<?php do { $luku = mt_rand(3600, 7499); } while (preg_match("/[89]/", $luku)); ?>
Ovelampi tapa on arpoa luku 8-järjestelmässä:
Kun nyt satuit numeron 7 valitsemaan, niin hommahan käy helposti tekemällä laskut oktaaliluvuilla. Ylärajasi tietenkin muuttuu muotoon 7477, koska tätä suuremmissa luvuissa jompikumpi viimeisistä numeroista olisi 8 tai 9.
Edit. Anttipa ehtikin lisätä tämän viestiinsä ensin. Tässä on kuitenkin vielä yleinen tapaus, nimittäin muunnos onnistuu muuhunkin kuin 8-kantaiseen järjestelmään:
<?php function arvo($min, $max, $kanta = 10) { $min = base_convert($min, $kanta, 10); $max = base_convert($max, $kanta, 10); return base_convert(mt_rand($min, $max), 10, $kanta); } $luku = arvo(3600, 7477, 8); $kuuden_merkin_heksaluku = str_pad(arvo(0, "FFFFFF", 16), 6, "0", STR_PAD_LEFT); ?>
Onnistuu myös do-while silmukalla:
Kiitos kaikille vastauksista.
Aihe on jo aika vanha, joten et voi enää vastata siihen.