私はこのPHP for loopを持っています。乱数を作成します。
for($i = 0; $i < mysql_num_rows($query); $i++) {
$random = rand(000, 999);
}
for
がランダムの結果を繰り返さないことを望みます。for
を 999 回実行しましたfor
。
for
ループと追跡配列は使用しません。代わりに、値の範囲で配列を作成し、それをシャッフルします。
$random_numbers = range(0, 999);
shuffle($random_numbers);
これで、アイテムが一意であることを保証して、この配列からアイテムをポップできます。出力を、などstr_pad()
の形式にする必要がある場合に使用します。000
001
shuffle()
おそらく最良のオプションですが、何らかの理由でそれをしたくない場合は、別のオプションがあります。
$max_value = 999;
$values = range(0, $max_value);
$counter = $max_value;
$num_rows = mysql_num_rows($query); //Best to move this out of the for loop so it doesn't recalculate every time through
for($i = 0; $i < $num_rows; $i++){
$rand_num = rand(0,$counter);
$current_number = $values[$rand_num];
array_splice($values, $rand_num, 1);
$counter--;
echo "rand number: " . $current_number . '<br>';
}
それを行うにはいくつかの方法があります。これは、MySQL クエリ自体で行うことができます。使用するだけです:
SELECT ... ORDER BY RAND()
これは最速のソリューションではありませんが、機能し、データを反復処理することができます。それをしたくない場合は、他のソリューションが示唆するように配列をシャッフルする必要があります。