目次
目的
- 配列のキー名をランダムに取得したい。
- 配列自体は並べ替えたくない。
- PHP の array_rand 関数を使用する。
テストしてみました。
サンプル
まずは、元になる配列を作成してみます。
PHP :
$a[]="No.1";
$a[]="No.2";
$a[]="No.3";
print_r($a); //配列を分かりやすく出力
出力結果 :
Array
(
[0] => No.1
[1] => No.2
[2] => No.3
)
次は array_rand 関数を使用して、ランダムにキー名を一つ取得してみます。
array_rand 関数の第二パラメータで取得するキーの数を指定出来るようです。
PHP :
$rand_keys=array_rand($a,1); //1 個のキー名を取得
var_dump($rand_keys); //変数を分かりやすく出力
echo $a[$rand_keys];
出力結果 :
int(1)
No.2
今度は、キーを二つ取得してみます。取得するキーの数が複数になる場合、 array_rand 関数はキー名の配列を返すようです。
PHP :
$rand_keys=array_rand($a,2); //配列が返ってくる
var_dump($rand_keys);
echo $a[$rand_keys[0]]."\n";
echo $a[$rand_keys[1]]."\n";
出力結果 :
array(2) {
[0]=>
int(0)
[1]=>
int(1)
}
No.1
No.2
取得するキーの数を 5 に指定したところ、以下のようなエラーが発生してしまいました。元の配列の長さを超えてしまったからのようです。
エラーメッセージ :
Fatal error: Uncaught ValueError: array_rand(): Argument #2 ($num) must be between 1 and the number of elements in argument #1 ($array) in xxx.php:xxx
array_rand 関数は、配列自体を並べ替える事は無いようです。 array_rand 関数を実行した後に、元の配列を var_dump してみます。
PHP ソースコード :
$rand_keys=array_rand($a,1);
var_dump($rand_keys);
var_dump($a);
出力結果 :
int(2)
array(3) {
[0]=>
string(4) "No.1"
[1]=>
string(4) "No.2"
[2]=>
string(4) "No.3"
}
元の配列は並べ変わってないようですね。
以上、閲覧ありがとうございました。
- [ Amazon.co.jp アソシエイト ] PHP 関係の本
- https://amzn.to/41Kpx4Q