5

1から5までループしたいのですが、forループを使用すれば簡単です。

for ($i=1; $i<=5; $i++)
{
 // do something
}

しかし、$ i = 1で開始する代わりに、1から5までのランダムな開始番号があり、今回はその値が3であると想像してください。したがって、3からループを開始する必要があり、ループシーケンスは3,4,5,1になります。 、2

私はすでにラドム番号を持っています、それが3であるとしましょう、そして私は3 4 5 1 2が必要です..それが5だった場合、私は5 1 234が必要になります

これどうやってするの??

どうもありがとう!

4

5 に答える 5

5

特定のランダムなポイント(オフセット)から開始して、5のループを作成します。

$offset = rand(1,5);
for ($i=1; $i<=5; $i++)
{
  echo (($i + $offset ) % 5) + 1;
}
于 2012-09-24T13:46:37.917 に答える
2

これは、$iと同等の別の変数を作成できることを意味します1が、もちろん、次のカウントになります。5$j$i + 2

3, 4, 5, 6, 7

モジュラス演算子 ( %) の出番です。モジュラス演算子は、2 番目の数値で除算した後の余りを返します。

3 % 5 //3
7 % 5 //2

1からを反復して52 ( ) を追加3-7し、結果を取得すると、次のmod(5)ようになります。

式:

$j = ($i + 2) % 5

3, 4, 0, 1, 2

これはあなたが望むものに近いですが、完全ではありません。したがって、2最初に追加する代わりに、最初に追加1し、モジュラスの結果の後にもう一度追加します。

$j = $i;
$j += 1;
$j %= 5;
$j += 1;
//or in one line:
$j = (($i + 1) % 5) + 1;

これにより、一連の3, 4, 5, 1, 2.

ランダムなオフセットを使用するには、最初のパディングが 5 つの連続した正の整数のセットでランダム化されていることを確認してください。

//this could be rand(0, 4) or rand(101, 105)
//it doesn't actually matter which range of 5 integers
//as the modulus operator will bound the results to the range of 0-4
$offset = rand(1, 5);
for ($i = 1; $i <= 5; $i++) {
    $j = (($i + $offset) % 5) + 1;
}
于 2012-09-24T13:52:47.720 に答える
1

これを試して :

for ($i = 0, $j = 3; $i < 5; $i++)
{
   echo $j;
   $j %= 5;
   $j++;
}

必要なことを行うには、2 つの変数が必要です。J = 3 に設定すると、 3 4 5 1 2 になります。

楽しんで。

于 2012-09-24T13:48:42.010 に答える
1

いくつかの(以前よりも優れた)段階的な例:

まず最初に、5 つの数字が必要なため、ループを実行します。これは、0 から 4 までのカウンターとして記述できます。

for ($i = 0; $i < 5; $i++) { ...

次に、開始値を指定します。これを変数に入れてカウンター変数と一緒に増やすと、1 から 5 まで数えることができます。

for ($i = 0, $j = 1; $i < 5; $i++, $j++) { ...
             ^^^^^^                ^^^^

$iこれがカウンターで、$j探している値が含まれています。

この例が示すように、実行するステップ数を決定するロジックは、ループ変数の増加から分離されています。

$jここで、5 を超えるかどうかのチェックを追加する必要があります。5 を超える場合は、1 にリセットする必要があります。しかし、それを行う良い方法は、モジュロ演算子を使用することです。つまり、 を増やす前に$j、それ自体を 5 で割った余りに設定されます。これがモジュロ演算、%PHPの演算子です。

for ($i = 0, $j = 3; $i < 5; $i++, $j %= 5, $j++) { ...
                                   ^^^^^^^

これforで、値を作成するループができました。

3この例では、 をランダムな開始番号に置き換えることができます。0 より大きく 6 より小さいことに注意してください。そうしないと、少なくとも最初の反復で間違った数値が返されます。

ご想像のとおり、これを行う方法は複数あるため、これは 1 つの例にすぎません。

于 2012-09-24T14:48:53.383 に答える
0
 $i = array(3,4,5,1,2); //considering you want to follow this order, and not random.
 foreach($i as $v) {
 //do something
 }
于 2012-09-24T13:46:00.610 に答える