2012-09-24 52 views
5

Quiero bucle desde 1 hasta 5. Eso es fácil si se utiliza un bucle for:PHP: bucle desde el 1 hasta el 5 de partida por 3

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

Pero imagina en vez de empezar por $ i = 1 Tengo un número de inicio aleatorio de 1 a 5 y esta vez su valor es 3. Entonces, tengo que comenzar a pasar de 3 a bucle y la secuencia de bucle debería ser: 3,4,5,1,2

Ya tengo el número de radom , digamos que es 3, entonces necesito 3 4 5 1 2 ... si fuera 5, necesitaría 5 1 2 3 4

¿Cómo puedo hacer esto?

¡Muchas gracias!

Respuesta

1

Prueba esto:

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

Se necesitan dos VARs Haz lo que quieras. Si configura J = 3, lo hará 3 4 5 1 2

diviértase.

+0

imprime 4 2 $ y si j = 3, lo necesito para imprimir 3 4 5 1 2 –

+0

Acabo de actualizar mi respuesta, esto debería funcionar ahora. – Weacked

+0

Siendo $ j = 3; imprime 3 2 que es genial porque comienza por 3 pero en lugar de 1 muestra 6 –

0
$i = array(3,4,5,1,2); //considering you want to follow this order, and not random. 
foreach($i as $v) { 
//do something 
} 
+0

que está codificado, quiero decir 3 es un número aleatorio, la siguiente carga podría ser 4 o 2 o 1 o 5 .. –

5

que desea iniciar en un punto aleatorio determinado (el desplazamiento) y luego hacer un lazo de 5:

$offset = rand(1,5); 
for ($i=1; $i<=5; $i++) 
{ 
    echo (($i + $offset) % 5) + 1; 
} 
+0

3 es un número aleatorio, la siguiente carga podría ser 4 o 2 o 1 o 5 –

+0

Ajustado mi respuesta – JvdBerg

+0

su serie producirá '3, 4, 0, 1, 2'. – zzzzBov

2

Bueno, $i se repetirá 1-5 que significa que puede hacer que otra variable $j que es equivalente a $i + 2, pero por supuesto que resultaría en la cuenta de:

3, 4, 5, 6, 7 

que es donde el módulo operador (%) llega, el operador módulo le da el resto de la división por el segundo número:

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

Si iterat e 1-5 y añadir 2 (3-7), y toma el resultado mod(5), se obtendría:

ecuación:

$j = ($i + 2) % 5 

3, 4, 0, 1, 2 

Esto se acerca a lo que quiere, pero no del todo. Así que en lugar de añadir 2 inicialmente, añadir 1 inicialmente, y de nuevo después de que el resultado del módulo:

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

que le dará una serie de 3, 4, 5, 1, 2.

Para utilizar un desplazamiento aleatorio, sólo asegúrese de que el relleno inicial se asignaron al azar en un grupo de 5 números enteros positivos consecutivos:

//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; 
} 
1

Algunos (mejor que mi anterior) ejemplo paso a paso:

En primer lugar, desea tener 5 números, es por eso que hace el ciclo.Eso podría escribirse como un contador de 0 a 4:

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

Luego especifique su valor de inicio. Si lo pones en una variable y aumenta junto con la variable de contador, esto le permite contar del 1 al 5:

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

Aquí $i es el mostrador y $j contiene el valor que está buscando.

Como muestra este ejemplo, la lógica para determinar el número de pasos a realizar se ha separado del aumento de la variable de bucle.

Ahora necesita agregar un cheque si $j supera el 5 y, si lo hace, debe reiniciarse a 1. Sin embargo, una buena forma de hacerlo es usar el operador de módulo. Eso significa que, antes de aumentar $j, se establece en el resto del mismo, dividido por 5. Esa es la operación de módulo, % operador en PHP:

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

Y ahora usted tiene su bucle for que está creando el valor.

En este ejemplo, puede reemplazar el 3 con su número de inicio aleatorio. Tenga cuidado de que sea mayor que 0 y menor que 6, de lo contrario, al menos la primera iteración le daría un número incorrecto.

Como se puede imaginar, hay varias maneras de hacerlo, por lo que este es solo un ejemplo.

Cuestiones relacionadas