dポイントプレゼントキャンペーン実施中!

現在PHPで診断メーカー的なものを作成しています。
そこで、PHPの技術的なことでご質問です。
//$textArrayには50個程の文字列が入っています。
$txtNum = count($textArray);

//$clickは入力された名前です。
$num = sprintf("%u",crc32($click));
//1個目の度の番号
$i= $num % $txtNum;

//2個目の度の番号
$num2 = sprintf("%u",crc32($textArray[$i]));
$i2 = $num2 % $txtNum;

//3個目の度の番号
$num3 = sprintf("%u",crc32($textArray[$i2]));
$i3 = $num3 % $txtNum;

echo $i.'--'.$i2.'--'.$i3;


上記のように、名前に対して固定された文字列を配列から3つ抽出しています。
i,i2,i3ともにそれぞれ被らない数字にしたいのですが、上記のようにやると入力された名前によってはi,i2,i3でそれぞれ数字が被る場合があります。
これを被らないようにするには何か方法がありますでしょうか。

10進数を剰余代入することで、配列の中の数の範囲内で数字を抽出しています。

ばったりと詰まってしまい、ヒント等もらえますと幸いです。

よろしくお願いします。

A 回答 (1件)

次のような方法があると思います。


1. shffle(array)してから先頭3個を使う
2. 1.だとarrayを変更してしまうので、range(1, 50)とかで添字を作って、それをarrayに適用する
3. 昔ながらの方法: arrayと同じ要素数のbool値arrayを作ってランダムに添字を生成するたびにbool arrayの使ったよflagを立てる
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!