目次

目的

  • 配列のキー名をランダムに取得したい。
  • 配列自体は並べ替えたくない。
  • PHP の array_rand 関数を使用する。

テストしてみました。

PHP の array_rand 関数。
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

同じカテゴリの投稿(PHP)

前後の投稿