Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Numeroiden arvonta PHP:llä

Tka3 [06.02.2009 19:41:16]

#

Mitenkäs saisin PHP:n arpomaan nelinumeroisen koodin lukujen 3600-7499 väliltä?

Metabolix [06.02.2009 19:42:17]

#

<?php
$luku = mt_rand(3600, 7499);
?>

Tka3 [06.02.2009 21:36:42]

#

Kiitos.

Mitenkä tuon saisi vielä niin, ettei mikään numero olisi yli 7?

Antti Laaksonen [06.02.2009 21:59:50]

#

Vaikkapa näin:

<?php
do {
    $luku = mt_rand(3600, 7499);
} while (preg_match("/[89]/", $luku));
?>

Ovelampi tapa on arpoa luku 8-järjestelmässä:

<?php
$luku = decoct(mt_rand(03600, 07477));
?>

Metabolix [06.02.2009 22:11:05]

#

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.

<?php
$luku = sprintf("%o", mt_rand(03600, 07477));
?>

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);
?>

Tumettaja [06.02.2009 22:12:32]

#

Onnistuu myös do-while silmukalla:

<?php
	do {
		$luku = mt_rand(3600, 7499);
		$loytyyko = false;
		for ($i=0; $i<3; $i++) {
			if ($luku[$i] > 7) {
				$loytyyko = true;
			}
		}
	} while ($loytyyko == false);
?>

Tka3 [06.02.2009 22:16:38]

#

Kiitos kaikille vastauksista.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta