解決済み

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

  • すぐに回答を!
  • 質問No.7336937
  • 閲覧数132
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 83% (30/36)

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つランダムで取り出すにはどのような書き方をすればよいのでしょうか?

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

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

  • 回答No.1

ベストアンサー率 51% (3827/7415)

シャッフルして先頭から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()が返すのはあくまでも添え字のほうですからね
お礼コメント
hpmt28

お礼率 83% (30/36)

yambejp さん

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

array_rand()が返すのは添え字なんですね。
「array_slice」は今後もよく使いそうです。
投稿日時 - 2012-03-02 03:02:25
感謝経済、優待交換9月20日スタート
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ