0

私はこのPHP for loopを持っています。乱数を作成します。

for($i = 0; $i < mysql_num_rows($query); $i++) {
$random = rand(000, 999);
}

forがランダムの結果を繰り返さないことを望みます。forを 999 回実行しましたfor

4

9 に答える 9

6

forループと追跡配列は使用しません。代わりに、値の範囲で配列を作成し、それをシャッフルします。

$random_numbers = range(0, 999);
shuffle($random_numbers);

これで、アイテムが一意であることを保証して、この配列からアイテムをポップできます。出力を、などstr_pad()の形式にする必要がある場合に使用します。000001

于 2013-07-03T14:48:33.767 に答える
3

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>';
}
于 2013-07-03T14:54:08.617 に答える
1

それを行うにはいくつかの方法があります。これは、MySQL クエリ自体で行うことができます。使用するだけです:

SELECT ... ORDER BY RAND()

これは最速のソリューションではありませんが、機能し、データを反復処理することができます。それをしたくない場合は、他のソリューションが示唆するように配列をシャッフルする必要があります。

于 2013-07-03T14:48:36.463 に答える