ランダムで複数の文字や値を表示する際に、重複しない処理です。
以下のように記述します。
$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



7行目、
$t = $str_arr – $d;
は、
$t = $str_ct – $d;
ではないでしょうか?
参考になりました