今日はランダム数字の生成です。
任意の数字を作りたい場面はよくあります。
会員番号の生成、おみくじなどなど、いろいろ使われています。
ランダムな数字の作り方はいろいろあります。
任意の数字を作りたい場面はよくあります。
会員番号の生成、おみくじなどなど、いろいろ使われています。
ランダムな数字の作り方はいろいろあります。
まずはとても簡単なものから・・・
rand()関数を使います。
実行すると・・・
rank関数、またはmt_rank関数に引数を入れると、数字の範囲を設定できます。
random2は1から5、random4は0から99となります。
引数がない場合は、getranmax()関数、またはmt_getRandmax()関数で出てきた値
が最大値となります。
この場合は、最大値が2147483647となります。10桁を超えるとそれ以上は表示で
きません。
random5がその例で、2147483647よりも大きい数を指定していますが、出てくる
数はそれよりも小さな数字が出ています。
次に0から20の範囲で20回ループして、ランダムに数字を取得します。
次のプログラムを実行します。
実行すると・・・
取り出すことはできましたが、同じ数がいくつか見られます。
簡単なもので重複してもいい場合は、これだけで十分です。
しかし、1つずつ取得して、重複しないように数字を取得したい場合もあります。
この場合は、配列を作り、配列の中身をごちゃまぜして、ひとつひとつ取り出し
ます。
次のプログラムを実行してみます。
range関数で1から20までの数字の配列を作り・・・。
shuffle関数で要素の順番を適当に並び替えます。
結果はごらんの通り。重複しない数字を取り出すことができます。
shuffle()関数は全部の配列を対象に並び替えますが、
1~20の数字のうち重複しないで2つとか半分だけ取り出したい場合もあるかも
しれません。
この場合はarray_rand()関数を使います。
次のプログラムを実行してみます。1から20までの数字の配列から任意の10個を
重複なしで取り出します。
実行すると・・・
今週は数字をいろいろな方法で適当に取り出してみましたが、やっぱり文字列も
一緒にしたいですね。
そして、数字も14桁とか20桁とかもっと大きな数字も取り出したいと考えるかも
しれません。
ということで、来週は10桁を超える数字と文字列を含めたランダム文字列の生成
について書きたいと思います。
おしま~い。
rand()関数を使います。
<?
$random1 = rand();
$random2 = rand(1,5);
$random3 = mt_rand();
$random4 = mt_rand(0,99);
$random5 = mt_rand( 2147483647, 9999999999 )
?>
実行すると・・・
random1 = 740002563
random2 = 1
random3 = 1458199756
random4 = 49
random5 = 1630082324
rank関数、またはmt_rank関数に引数を入れると、数字の範囲を設定できます。
random2は1から5、random4は0から99となります。
引数がない場合は、getranmax()関数、またはmt_getRandmax()関数で出てきた値
が最大値となります。
<?
$randmax = getrandmax();
$mtrandmax = mt_getrandmax();
echo("randmax = $randmax");
echo("<br>");
echo("mtrandmax = $mtrandmax);
?>
randmax = 2147483647
mtrandmax = 2147483647
この場合は、最大値が2147483647となります。10桁を超えるとそれ以上は表示で
きません。
random5がその例で、2147483647よりも大きい数を指定していますが、出てくる
数はそれよりも小さな数字が出ています。
次に0から20の範囲で20回ループして、ランダムに数字を取得します。
次のプログラムを実行します。
<?
for ( $i = 0; $i < 20; $i++ ){
$num = rand(0,20);
echo("num". $i . "=". $num . "<br>");
}
?>
実行すると・・・
num0=11
num1=5
num2=3
num3=16
num4=16
num5=18
num6=3
num7=10
num8=15
num9=19
num10=10
num11=9
num12=7
num13=2
num14=0
num15=3
num16=9
num17=1
num18=17
num19=17
取り出すことはできましたが、同じ数がいくつか見られます。
簡単なもので重複してもいい場合は、これだけで十分です。
しかし、1つずつ取得して、重複しないように数字を取得したい場合もあります。
この場合は、配列を作り、配列の中身をごちゃまぜして、ひとつひとつ取り出し
ます。
次のプログラムを実行してみます。
<?
$num_list = range(1, 20);
$num_list = shuffle($num_list);
foreach( $num_list as $key => $values ) {
echo("key: $key ". "num: $values ". "<br>");
}
?>
range関数で1から20までの数字の配列を作り・・・。
shuffle関数で要素の順番を適当に並び替えます。
結果はごらんの通り。重複しない数字を取り出すことができます。
key: 0 num: 11
key: 1 num: 5
key: 2 num: 7
key: 3 num: 15
key: 4 num: 6
key: 5 num: 2
key: 6 num: 8
key: 7 num: 19
key: 8 num: 14
key: 9 num: 1
key: 10 num: 13
key: 11 num: 3
key: 12 num: 16
key: 13 num: 4
key: 14 num: 17
key: 15 num: 9
key: 16 num: 18
key: 17 num: 10
key: 18 num: 12
key: 19 num: 20
shuffle()関数は全部の配列を対象に並び替えますが、
1~20の数字のうち重複しないで2つとか半分だけ取り出したい場合もあるかも
しれません。
この場合はarray_rand()関数を使います。
次のプログラムを実行してみます。1から20までの数字の配列から任意の10個を
重複なしで取り出します。
$num_list = array_rand($num_list, 20);
<?
$num_list = range(1, 20);
$num_list = array_rand($num_list, 10);
foreach( $num_list as $key => $values ) {
echo("key: $key ". "num: $values ". "<br>");
}
?>
実行すると・・・
key: 0 num: 11重複しないで1から20のうち10個取得できています。
key: 1 num: 2
key: 2 num: 3
key: 3 num: 5
key: 4 num: 7
key: 5 num: 4
key: 6 num: 19
key: 7 num: 8
key: 8 num: 0
key: 9 num: 1
今週は数字をいろいろな方法で適当に取り出してみましたが、やっぱり文字列も
一緒にしたいですね。
そして、数字も14桁とか20桁とかもっと大きな数字も取り出したいと考えるかも
しれません。
ということで、来週は10桁を超える数字と文字列を含めたランダム文字列の生成
について書きたいと思います。
おしま~い。














コメントする