[PHP]ランダムで複数の値を重複しないように処理

ランダムで複数の文字や値を表示する際に、重複しない処理です。

以下のように記述します。

$str_arr = array(
"PHP","MySQL","Web","Site","CGI","HTML","Good","Bad"
);
$str_ct = count($str_arr);
for($i=0; $i<5; $i++){
$d = $i + 1;
$t = $str_ct - $d;
$rd = rand(0, $t);
echo $str_arr[$rd];
array_splice($str_arr, $rd, 1);
}

randとでランダムに配列の位置を指定し、それをarray_spliceで削除しています。
次のfor処理の時にはさきほどのランダムで表示した値は消えているので、$iで引くことによって値が引かれた数($t)をだし、再びランダムに指定してます。



PHP 逆引きレシピ (PROGRAMMER’S RECiPE)

著者/訳者:鈴木 憲治 安藤 建一 山田 直明 八木 照朗 山本 義之 河合 勝彦

出版社:翔泳社( 2009-06-30 )

定価:¥ 2,730

Amazon価格:¥ 2,730

単行本(ソフトカバー) ( 768 ページ )

ISBN-10 : 4798119865

ISBN-13 : 9784798119861


スポンサード リンク

Comments

7行目、
$t = $str_arr – $d;
は、
$t = $str_ct – $d;
ではないでしょうか?

参考になりました

556さん>

ご指摘ありがとうございます。
すみません、記述ミスでした。

コメントする

(必須)

(必須)