PHPのプログラムを作成していて、配列の中身をシャッフルしたいと思ったことはないでしょうか。PHPでは配列をシャッフルする関数が用意するため、これは簡単にできます。
ではその方法についてサンプルプログラムを示して解説していきたいと思います。
PHPで配列の中身をシャッフルする方法
配列の中身をシャッフルするサンプルプログラムがこちらです。
$my_array = array("A", "B", "C", "D", "E");
shuffle($my_array);
print_r($my_array);
実行結果:
Array
(
[0] => E
[1] => A
[2] => D
[3] => C
[4] => B
)
プログラム解説
それでは、上記のプログラムについて解説したいと思います。
この部分で「A,B,C,D,E」という中身の配列を宣言して変数「$my_array」に格納しております。
shuffle という関数を使用していますが、ここで配列「$my_array」のシャッフルを行っています。
shuffle 関数は引数にした配列をシャッフルします。戻り値は、boolean 型であることに注意してください。よくある間違いとしては、戻り値でシャッフルされた配列が返ってくると勘違いしてしまうことです。このような勘違いをしてしまって、次のようなプログラムを作ってしまうと正しい結果を得ることができません。
$my_array = array("A", "B", "C", "D", "E");
$shuffle_array = shuffle($my_array);
print_r($shuffle_array);
1
実行結果でよくわからない「1」という数字が表示されますが、これは boolean 型 の「true」が変換されて表示されていると思われます。いずれにしても、間違えやすい使い方なので注意しましょう。
話がそれてしまいましたが、本来のプログラム解説に戻りたいと思います。
こちらの部分で配列「$my_array」の中身を表示していますが、実行結果を見れば、シャッフルされていることがわかります。
shuffle 関数で連想配列もシャッフルできる?
shuffle 関数を使って連想配列もシャッフルすることができるのでしょうか。次のようなサンプルプログラムで試してみたいと思います。
$my_array = array(
"key1" => "value1",
"key2" => "value2",
"key3" => "value3",
);
print_r($my_array);
shuffle($my_array);
print_r($my_array);
実行結果:
Array
(
[key1] => value1
[key2] => value2
[key3] => value3
)
Array
(
[0] => value2
[1] => value3
[2] => value1
)
プログラムの実行結果をみると値の方はシャッフルされていますが、キーのほうがリセットされて通常の配列に変換されてしまっていることがわかります。shuffle 関数では連想配列はうまくシャッフルできないことがわかります。
コメント