【PHP入門】ランダムな数値・文字列を作成する | rand・mt_rand

書いた人 ヤマシタ
侍エンジニア塾ブログは、未経験からWebアプリ開発と仕事獲得をサポートする
侍エンジニア塾のオウンドメディアです。
プログラミング学習を覗き見

こんにちは!フリーエンジニアのヤマシタです。

PHPでは、ランダムな値を生成する関数がいくつか用意されています。

この記事では、

・rand関数を使用してランダムな値を生成する方法
・mt_rand関数を使用してランダムな値を生成する方法

という基本的な内容から、

・array_rand関数を使用して配列の値をランダムに取得する方法
・str_shuffle関数を使用してランダムな英数字を生成する方法
・uniqid関数を使用してランダムな英数字を生成する方法
・md5関数を使用してランダムな英数字を生成する方法

などの応用的な使い方に関しても解説していきます。

今回はそんな乱数を生成する方法について、わかりやすく解説します!

ランダムな値を生成する(rand)

rand関数とは

rand関数はランダムな値を生成するときに使用します。

ランダムな値とは規則性がない値のことで、規則性の無い数値のことを乱数とも呼びます。

rand関数は生成するたびに異なる数値をランダムに取得することが可能で、たとえば「32856」の次は「53253」といった予測のつかない値を生成できます。

rand関数は以下のように記述します。

書き方1(引数なし):

書き方2(引数あり):

引数:
オプションの引数を省略した場合は、rand関数は乱数の最大値を取得するgetrandmax()の間の擬似乱数を取得します。

最小値、最大値を指定した場合、例えば最小値3で最大値10を指定したい場合はrand(3, 10)を指定します。

rand関数の使い方

ここではrand関数を使用して、乱数を取得する方法を見ていきましょう。

サンプルプログラム1(引数なし):

実行結果:

rand関数を呼び出すごとに異なる乱数が生成されていることがわかりますね!

次に最小値と最大値を引数に指定した範囲指定の乱数の生成方法を見ていきましょう。

サンプルプログラム2(範囲指定):

実行結果:

指定した最小値3、最大値10の間で乱数が生成されていることがわかりますね!

ランダムな値を生成する(mt_rand)

mt_rand関数とは

mt_rand関数はrand関数と同じく数値などの値からランダムな値を取得するときに使用します。

mt_rand関数はrand関数の代替手段と呼べる関数です。

mt_rand関数はメルセンヌ・ツイスタと呼ばれる擬似乱数列生成器を使用しているため、rand関数より4倍以上高速に乱数を生成できると言われています。

また、 rand関数で使用する古いライブラリの乱数発生器は、特性が不明であったり処理が低速のため、通常使用する分にはmt_rand関数を使用することをオススメします。

mt_rand関数は、以下のように記述します。

書き方1(引数なし):

書き方2(引数あり):

引数:
mt_rand関数は引数を指定しない場合は、0とgetrandmax関数の間の疑似乱数を整数で返します。

引数を指定する場合は、指定した最小値と最大値の間の乱数を取得することができます。

mt_rand関数の使い方

以下にmt_rand関数を使用して、乱数を取得する方法を記述します。

サンプルプログラム1(引数なし):

実行結果:

このように、mt_rand関数を呼び出すごとに異なる乱数を取得することができます。

以下ではmt_rand関数の引数に最小値と最大値を指定しています。

サンプルプログラム2(範囲指定):

実行結果:

このように最小値と最大値を指定すれば、指定した値を含む範囲内の乱数を取得することができます。

ランダムな文字列を生成する

mt_rand関数を使用してランダムな文字列を生成する場合、ASCIIコードで指定された引数から文字を返すchr関数を併用して文字列を生成します。

ASCIIコードによる文字変換は65がA、90がZのため、ランダムな文字列を生成する場合はrand関数で最小値65、最大値95で指定する必要があります。

サンプルプログラム:

実行結果:

実行結果のとおり、6文字のランダムな文字列を生成することができました。

ランダムな文字列は、パスワードを設定するときにも便利です。

配列の要素をランダムに取得する

ここでは、array_rand関数の使い方について解説していきます。

array_randとは

配列から1つ以上の配列の要素をランダムに取り出したいときには、array_rand関数を使用します。

array_rand関数は以下のように記述します。

書き方:

引数:
第一引数にはランダムに要素を取得する配列を指定し、第二引数には取得する要素数を指定できます。

返り値:
array_rand関数は指定した配列のランダムなキー配列を返します。

array_randの使い方

以下にarray_rand関数を使用して、配列の要素をランダムに取得する方法を記述します。

サンプルプログラム:

実行結果:

サンプルでは5つの要素がある連想配列をarray_rand関数を指定して、3つのランダムな要素のキー配列を取得しています。

第二引数は配列の要素数より大きな値を指定すると、以下のようなエラーが発生しますので注意しましょう。

応用編 〜 ランダムな英数字を生成する

ここではさまざまな方法で数値と文字列を組み合わせたランダムな英数字を生成する方法を紹介します。

ランダムな英数字は、パスワードを自動で生成するときなどに使用されます。

str_shuffle関数を使用する

str_shuffle関数を使用すると、引数に指定した文字列をシャッフルすることができます。

以下の例では文字列として数値とアルファベットのa-z、A-Zが含まれた文字列をstr_shuffle関数の引数に指定しています。

サンプルプログラム

実行結果:

このプログラムを実行すると、実行結果のようにランダムな英数字の文字列が作成されます。

また、substr関数を使用することで文字列の範囲を指定することもできます。

uniqid関数を使用する

uniqid関数を使用することでもランダムな文字列を生成することができます。

uniqid関数はユニークなIDを生成するときに使用し、第二引数にTRUEを指定することで、返り値の最後に線形合同法(擬似乱数列の生成式の一つ)で生成された文字列が負荷されます。

また、第一引数にrand関数を指定すると、さらにランダムな文字列を生成することができます。

サンプルプログラム

実行結果:

md5関数を使用する

md5関数は32文字の16進数からなるハッシュを取得することができます。

ハッシュとは簡単に例えるとデータを細切れするという意味があります。

第一引数には対象の文字列を指定し、第二引数にTRUEを指定することで 16バイト長のバイナリ形式で取得することができます。

以下の例ではmd5関数の引数に前述したuniqid関数と、その引数にrand関数を指定して、より複雑な文字列を生成しています。

サンプルプログラム


実行結果:

まとめ

ここではランダムな値を生成する方法について、

・rand関数を使用してランダムな値を生成する方法
・mt_rand関数を使用してランダムな値を生成する方法
・array_rand関数を使用して配列の値をランダムに取得する方法
・配列からランダムな要素を取得する方法
・str_shuffle関数を使用してランダムな英数字を生成する方法
・uniqid関数を使用してランダムな英数字を生成する方法
・md5関数を使用してランダムな英数字を生成する方法

などについて解説しました。

乱数を使用した処理は、数値を選んで当てたり、抽選で数値を選んだり、ゲームなどの処理でもよく使用します。

もし、乱数を生成する方法を忘れてしまったら、この記事を思い出してくださいね。


33歳、未経験だった僕がフリーエンジニアになれた理由
現在フリーランスをされている市川友哉さん。33歳で、プログラミングを学び始め、4ヶ月という短い期間でフリーランスエンジニアとして独立までされた学習ログを余すことなくインタビューさせていただきました。

プログラミングを学習中の方はもちろん、独立をお考えの方まで幅広く活用できる記事になっています。この機会に是非活用していただければと思います。


自分にプログラミングなんて・・・と思っていませんか?

今後10年間で今ある職業の『77%』はなくなると言われています。

人工知能や機械学習を筆頭にVR、AR、ドローンなどの最先端技術の発達はこれからのあなたの働き方に間違いなく影響を与えるでしょう。

将来を見据えてプログラミングができるようになってエンジニアになりたい、自分だけにしかできないクリエイティブな仕事がしたい、、、とお考えの方も少なくないでしょう。

と、同時に「難しそう、、自分にはできないだろう、、、」と諦めている方も多いのではないでしょうか。

弊社マンツーマンレッスンは、お一人お一人に専属のインストラクターがつくので、通常のスクールでは難しい、オリジナルアプリ開発や、フリーランスとしての仕事獲得まで支援しています。

まずは『無料体験レッスン』で弊社コンサルタントと一緒にあなた専用の学習カリキュラムを考えてみてはいかがでしょうか?

詳しくは下の画像をクリックしてください。

cta_mtm2

非常識な結果を出した卒業生

活躍する現役エンジニア

人気記事セレクション

LINEで送る
Pocket

この記事が気に入ったら
いいね!をしてフォローしよう

最新情報をお届けします

書いた人

ヤマシタ

フリーランスエンジニア。ITに関わるさまざまなコンテンツの企画・制作も行っています。
ITに関してはノウハウ系、ライフハック系、トレンド系など、今まで200本以上の執筆経験があります