【PHP】ランダムな文字列を生成する方法(重複ありとなし)

Pocket

前回ランダムな数値を生成することができる rand() 、 mt_rand() 関数についてのメモをとりました。
今回はこの「rand()」関数を使って、ランダムな文字列を生成するプログラムを作ってみようと思います。
ランダムなパスワード文字列を生成するときなどに使えるテクニックだと思いますので、頑張って覚えましょうφ(・_・”)メモメモ

mt_rand() 関数と配列を使って簡単なランダム文字列を作成する

早速作ってみましょう。まずは簡単なサンプルコードです。

まず「$wordwrray」という配列の中に、ランダム文字列生成に使用したい文字を入れていきます。
次に「$count」変数に「count(“$wordarray”)-1」とし、配列の中で一番大きなインデックス番号を取り出します。
「$max」変数にはランダム文字列の文字数を設定します。今回は「10」を設定しますが、ここを変えれば文字数を変えれるようにします。
最後に繰り返し構文の「for」を使用して「$random」変数に「0」から「$count」の間の数値をランダムで代入します。
そして「echo $wordarray[$random]」で配列内の何かが取り出されるという処理が合計10回行われる仕組みとなります。

ただこのランダム文字列には特徴があり、同じ文字が重複する可能性があるということです。
ビンゴやトランプのようなゲームを作る時、重複する数値が出て来てはバグになってしまいますよね?

次は重複する文字がでないようなプログラムを作ってみましょう。

重複しないランダム文字列を作成する

 

少し長くなってしまいましたね(;^ω^)
先程の重複していたものの違いとしては、「重複チェック」用の配列を作り、その中に重複のないランダムな数値を代入していきます(今回は $array という配列がチェック用です)。
while () の中のコードが、重複チェックのためのものです。$random にランダムな数値を($wordarray の最大インデックス番号以下の範囲で)代入し、それがもし、$array 、すなわち重複チェック用の配列の中に存在していれば再びランダムな数値を $random に代入して再び重複チェックを行います。この重複チェック作業がループし、もし配列内に存在していない数値ならば、その数値を配列内に代入し、break; によってループから抜け出します。
その後、この重複していない数値ばかりが格納された$array の配列を使用して、$wordarray から文字列を取り出すギミックとなります。
それでは実行結果を見てみましょう。

三回ためしに動かしてみましたが、どうやら重複もなく、無事動いているようですね。

終わりに

今回はここまでです。今回は重複の有り無しで、ランダムな文字列を作成するプログラムを組んでみました。ランダムの文字列や数値の作成テクニックは、他に「最低一文字は、指定されたものをいれなさい」といったものや、「小数点以下のランダム数値の作成」など、まだまだ使いたいテクニックがあるので、またの機会に挑戦してみます。
それではお疲れ様でした(・ω・)ノシ

エッグ

シェアする

コメントを残す

メールアドレスが公開されることはありません。

コメントする