PHPでランダム文字列を作る方法はいくつかあると思いますが、array_rand() を使ってやる方法をご紹介します。
array_rand()については下の記事をご覧ください。
array_rand()は配列の中からランダムに要素のキーを取得する関数です。
ランダム文字列を作成する文字の配列を作成し、そこからランダムに取得するという作りになります。
PHPのarray_randを使ってランダム文字列を作成する方法
array_rand() は第2引数に取得する要素数を指定できますが、これを使うと元の配列の並びに依存してしまいます。
なので、10文字のランダム文字列を作るときは10回ループします。
1 2 3 4 5 6 7 8 9 |
$ary = array_merge(range('a', 'z'), range('0', '9'), range('A', 'Z')); $str = ""; for($i = 0; $i < 10; $i++) { $key = array_rand($ary, 1); $str .= $ary[$key]; } var_dump($str); |
最初の1行目は使う文字を定義します。
今回は、半角数字(0~9)と半角アルファベット小文字(a~z)、半角アルファベット大文字(A~Z)を使います。
for文を使い10回ループし、ランダムに1文字ずつ取得して繋げていきます。
これで完成です。
この方法だと元の配列の並び順には影響しないし、同じ文字が含まれるランダム文字列を作成できます。
同じ文字を使いたく無い場合は、次にshuffle()を使う方法も紹介します。
同じ文字を使わない場合はshuffle()も使う
shuffle()は配列の並び順をごちゃ混ぜにしてくれる関数です。
使う文字は上で紹介したものと同じです。
1 2 3 4 5 6 7 8 9 |
$ary = array_merge(range('a', 'z'), range('0', '9'), range('A', 'Z')); shuffle($ary); $str = ""; for($i = 0; $i < 10; $i++) { $str .= $ary[$i]; } var_dump($str); |
シャッフルした後、先頭から10文字取得しています。
これで同じ文字は使わず、文字取得元の並び順にも影響しないランダム文字列を作成することができます。
配列を使わない方法
これは僕より賢い人がたくさんいたのでそちらを紹介します。
これとかセンスを感じますね。
1行でランダム文字列を生成するとか賢すぎますw
まとめ
僕は同じ文字が何度も出現する可能性のあるランダム文字列を作成したかったので、この記事で紹介しているarray_rand()を使うのが一番分かりやすくていいです。
自分が一番分かりやすい方法で作るのが一番バグが少なくなっていいかもしれないですね。
コメントを残す