こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

array_randで要素が数字の場合の処理方法

PHPのarray_randについて教えて下さい。
下記のようなソースを作りましたが思った通りの結果になりません。


//(A)
$test=array(3,5,8,11,14,24,26,28);

print_r($test);

foreach ($test as $val)
{
echo $val.'<br>';
}

//(B)
$keys = array_rand($test, 5);//決められた数を抽出
print_r($keys).'<br><br>';


foreach ($keys as $val)
{
echo $val.'<br>';
}


Aの部分の結果は

Array ( [0] => 3 [1] => 5 [2] => 8 [3] => 11 [4] => 14 [5] => 24 [6] => 26 [7] => 28 )

foreachの部分の出力↓
3
5
8
11
14
24
26
28

となりこれは特に問題ありません。


Bの部分でAの配列から5つランダムで取り出したいのですが、結果は

Array ( [0] => 0 [1] => 3 [2] => 5 [3] => 6 [4] => 7 ) 0

foreachの部分の出力↓
0
3
5
6
7

となってしまい、Aの配列の添え字の中から5つの数字が選ばれるようになってしまいます。

Aの添え字ではなく「3,5,8,11,14,24,26,28」の数字から5つランダムで取り出すにはどのような書き方をすればよいのでしょうか?

ご回答よろしくお願い致します。

投稿日時 - 2012-03-01 22:02:06

QNo.7336937

すぐに回答ほしいです

質問者が選んだベストアンサー

シャッフルして先頭から5個とればよいのでは?

<?PHP
$test=array(3,5,8,11,14,24,26,28);
shuffle($test);
$array = array_slice($test, 0,5);
print_r($array);
?>

array_rand()が返すのはあくまでも添え字のほうですからね

投稿日時 - 2012-03-01 23:33:49

お礼

yambejp さん

ご回答ありがとうございました。
求める結果を得ることができました。

array_rand()が返すのは添え字なんですね。
「array_slice」は今後もよく使いそうです。

投稿日時 - 2012-03-02 03:02:25

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問