・IT/Web系エンジニアの経験者の方
・どこの転職エージェントを利用しようか迷っている方
それなら、キッカケエージェントにご相談!
キッカケエージェントでは、少数精鋭のエージェントが、エンジニアの経験やスキル、志向性などをカウンセリングし、的確なアドバイスを提供します!
また、徹底した企業へのヒアリングにより、最適なマッチングを実現し、今では内定率が一般的なエージェントの2倍以上となっています!
転職エージェントに迷っている方、まずは無料でキャリア相談から!
(この記事は2022年6月29日に投稿されました。)
PHPで配列の要素をシャッフルする関数として、shuffle()があります。
shuffle()とは指定した配列の要素の順番をシャッフルして並び替える関数になります。
そのため、毎回配列の要素の位置が変化しますので注意してください。
そして、配列の要素をシャッフルすることから、多次元配列や連想配列の要素もシャッフルすることができます。
また、shuffle()をうまく利用することで、配列の要素だけでなく、文字列をシャッフルして並べることも可能です。
今回はPHPのshuffle()で配列や連想配列の要素をシャッフルする方法について紹介していきます。
shuffle()とは
冒頭でも言いましたが、shuffle()とは、指定した配列の要素の順番をシャッフルする関数となります。
そのため、shuffle()を実行する度に要素の順番が変化します。
shuffle()の書き方
shuffle()は下記のよう記述します。
1 | <?php shuffle('シャッフルしたい配列'); ?> |
shuffle()は1つのパラメータを指定することで使用することができます。
shuffle()のパラメータ
shuffle()のパラメータは下記のようになります。
- シャッフルしたい配列(必須):
要素をシャッフルしたい配列を指定する
shuffle()はパラメータとして、「シャッフルしたい配列」を指定します。
「シャッフルしたい配列」は配列を直接指定したり、変数に格納した変数名を指定しても構いません。
shuffle()で配列の要素をシャッフルするサンプルコード
shuffle()を使って、配列の要素をシャッフルするサンプルコードをご紹介します。
ここでは、下記の2つの場合でshuffle()を使用してみます。
- 指定した配列の要素が2つ以上である場合
- 指定した配列の要素が1つ以下である場合
指定した配列の要素が2つ以上である場合
指定した配列の要素が2つ以上である場合にshuffle()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php $array1 = ['PHP','Java','Kotlin','C#', 'Ruby']; echo '・対象の配列'; var_dump($array1); echo '・配列の要素を取り出す'; echo $array1[2]; shuffle($array1); echo '・shuffle()を使用した後の配列'; var_dump($array1); echo '・配列の要素を取り出す'; echo $array1[2]; ?> |
実行結果
指定した配列の要素が2つ以上である場合に、shuffle()を使用すると要素がシャッフルさます。
そのため、shuffle()を使用する前と同じインデックスを指定すると、取得する要素が変わります。
指定した配列の要素が1つ以下である場合
指定した配列の要素が1つ以下である場合に、shuffle()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php $array1 = ['PHP']; echo '・対象の配列'; var_dump($array1); echo '・配列の要素を取り出す'; echo $array1[2]; shuffle($array1); echo '・shuffle()を使用した後の配列'; var_dump($array1); echo '・配列の要素を取り出す'; echo $array1[2]; ?> |
実行結果
指定した配列の要素が1つ以下である場合に、shuffle()を使用すると要素はシャッフルされず、エラーが発生します。
shuffle()で多次元配列の要素をシャッフルするサンプルコード
shuffle()を使って、多次元配列の要素をシャッフルするサンプルコードをご紹介します。
ここでは、下記の2つの場合でshuffle()を使用してみます。
- 2次元配列の要素をシャッフルする場合
- 3次元配列の要素をシャッフルする場合
2次元配列の要素をシャッフルする場合
2次元配列の要素をシャッフルする場合にshuffle()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <?php $array2 = [ ['PHP','Java'], ['Kotlin','C#', 'Ruby'], ['JavaScript','Swift'], ['VB','Python'] ]; echo '・対象の配列'; var_dump($array2); echo '・配列の要素を取り出す1'; echo $array2[1][1]; echo '・配列の要素を取り出す2'; var_dump(array2[0]); //2次元配列の要素をシャッフル shuffle($array2); //1次元配列の要素をシャッフル shuffle($array2[1]); echo '・shuffle()を使用した後の配列'; var_dump($array2); echo '・配列の要素を取り出す1'; echo $array2[1][1]; echo '・配列の要素を取り出す2'; var_dump($array2[0]); ?> |
実行結果
2次元配列の要素と2次元配列の中にある1次元配列の要素がシャッフルされています。
そのため、こちらもでもshuffle()を使用する前と同じインデックスで指定すると、取得できる要素が変わっています。
3次元配列の要素をシャッフルする場合
3次元配列の要素をシャッフルする場合にshuffle()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <?php $array3 = [ [['PHP','Java'],['Kotlin','C#', 'Ruby']], [['JavaScript','Swift'],['VB','Python']], [['TypeScript', 'Dart'], ['R', 'Scala']] ]; echo '・対象の配列'; var_dump($array3); echo '・1次元配列の要素を取り出す'; echo $array3[0][1][1]; echo '・2次元配列の要素を取り出す'; var_dump($array3[1][1]); echo '・3次元配列の要素を取り出す'; var_dump($array3[0]); //3次元配列の要素をシャッフル shuffle($array3); //2次元配列の要素をシャッフル shuffle($array3[1]); //1次元配列の要素をシャッフル shuffle($array3[0][1]); echo '・shuffle()を使用した後の配列'; var_dump($array3); echo '・1次元配列の要素を取り出す'; echo $array3[0][1][1]; echo '・2次元配列の要素を取り出す'; var_dump($array3[1][1]); echo '・3次元配列の要素を取り出す'; var_dump($array3[0]); ?> |
実行結果
3次元配列の要素3次元配列の中にある2次元配列の要素、2次元配列の中にある1次元配列の要素がシャッフルされています。
そのため、こちらもでもshuffle()を使用する前と同じインデックスで指定すると、取得できる要素が変わっています。
shuffle()で連想配列の要素をシャッフルするサンプルコード
shuffle()を使って、連想配列の要素をシャッフルするサンプルコードをご紹介します。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php $array4= [ '1' => 'PHP', '2' => 'Swift', '3' => 'Kotlin', '4' => 'Java', '5' => 'Cobol', ]; echo '・対象の連想配列'; var_dump($array4); echo '・連想配列の要素を取り出す'; echo $array4['3']; shuffle($array4); echo '・shuffle()を使用した後の連想配列'; var_dump($array4)); echo '・連想配列の要素を取り出す'; echo $array4[3]; ?> |
実行結果
連想配列にshuffle()を使用することで、要素がシャッフルされています。
しかし、よくみてみると連想配列のキーがリセットされています。
そのため、設定したキーを指定しても取得できなくなる可能性がありますので注意が必要です。
shuffle()で文字列をシャッフルして並べたい場合
shuffle()で文字列をシャッフルして並べたい場合は下記のようにコードを追記します。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?php $text1 = 'プログラミング'; echo '・対象の文字列1: '; echo $text1; // 文字列をシャッフルする関数呼び出し $text1_sf = textShuffle($text1); echo '・シャッフル後の文字列1: '; echo $text1_sf; $text2 = 'Programming'; echo '・対象の文字列2: '; echo $text2; // 文字列をシャッフルする関数呼び出し $text2_sf = textShuffle($text2); echo '・シャッフル後の文字列2: '; echo $text2_sf; // 文字列をシャッフルする関数 function textShuffle ($text) { $array = mb_str_split($text); shuffle($array); $arrayToText = implode($array); return $arrayToText; } ?> |
実行結果
shuffle()によって、全角の文字列と半角の文字列の順番がシャッフルされて表示されています。
また、コードの解説は下記のようになります。
- mb_str_split()でシャッフルする文字列を配列に変換する
- 文字が追加された配列をshuffle()でシャッフルする
- シャッフルされた配列をimplode()で文字列にする
まとめ
⚫︎ shuffle()とは、指定した配列の要素をシャッフルする関数である
⚫︎ shuffle()を使用するには1つのパラメータを指定する
・ シャッフルしたい配列(必須)
⚫︎ 指定した配列の要素が2つ以上である場合に、shuffle()を使用すると要素がシャッフルされる
⚫︎ 指定した配列の要素が1つ以下である場合に、shuffle()を使用するとエラーが発生する
⚫︎ shuffle()は多次元配列の要素をシャッフルすることもできる
⚫︎ shuffle()は連想配列の要素をシャッフルすることができる
(しかし、キーがリセットされる)
⚫︎ shuffle()を使ったオリジナルの関数を作成することで文字列をシャッフルすることができる