2009-07-23 18 views
21

¿es posible hacer esto? (Aquí está mi código)Php for loop con 2 variables?

for ($i = 0 ; $i <= 10 ; $i++){ 
    for ($j = 10 ; $j >= 0 ; $j--){ 
    echo "Var " . $i . " is " . $k . "<br>"; 
    } 
} 

Quiero algo como esto:

var 0 es 10

var 1 es 9

var 2 es 8 ...

Pero mi código es incorrecto, da una gran lista. Php gurú, ¡ayúdame!

Respuesta

51

Prueba esto:

for ($i=0, $k=10; $i<=10 ; $i++, $k--) { 
    echo "Var " . $i . " is " . $k . "<br>"; 
} 

Las dos variables $i$k y se inicializan con 0 y 10 respectivamente. Al final de cada cada bucle $i será incrementado en uno ($i++) y $k decrementa en uno ($k--). Por lo tanto, $i tendrá los valores 0, 1, ..., 10 y $k los valores 10, 9, ..., 0.

+6

+1 - ni siquiera sabía que podía hacer esto! –

+0

Oh wow. No tenía idea de que establecieras múltiples vars dentro de un for-loop. Bonito. – Sampson

+0

Teniendo en cuenta lo que la sintaxis de un bucle de medios, tiene sentido ... –

1

No debe utilizar dos bucles for para lo que desea lograr ya que ' re bucle 121 veces total (11x11). Lo que realmente quieres es tener un contador declarado fuera del ciclo que rastrea j, y luego disminuir j dentro del ciclo.

Edit: Gracias Gumbo para la captura de la inclusión para mí.

+0

De hecho es 11 · 11 = 121 (de 0 a 10 inclusive). – Gumbo

+0

Ah, sí, ni siquiera vi eso. – AlbertoPL

0

Para ampliar las otras respuestas (correctas), lo que estaba haciendo se llama anidando bucles. Esto significa que por cada iteración del ciclo externo (el primero), estaba completando todo el ciclo interno. Esto significa que en lugar de 11 salidas, se obtiene 11 + 11 + 11 + ... = 11 * 11 salidas

1

Si, por ejemplo el código se parece, tiene dos valores que ejecutan el sentido contrario simplemente podría restar:

echo "Var " . $i . " is " . 10 - $i . "<br>"; 

Pero supongo que eso no es verdad ¿Lo que quieras? Además, tenga cuidado con el comma operator sugerido. Si bien es algo bueno, puede causar efectos secundarios dañinos en otros idiomas, como C and C++, ya que PHP lo implementa de manera diferente.

0
array_map(function($i) { 
    echo "Var {$i} is ".(10-$i)."<br/>".PHP_EOL; 
}, range(1,10)); 
1

También puede añadir una condición para la segunda variable

for ($i=0, $k=10; $i<=10, $k>=0 ; $i++, $k--) { 
    echo "Var " . $i . " is " . $k . "<br>"; 
} 
0

He intentado conseguir una hora de inicio y fin y almacenar en la base de datos, dado un tiempo de inicio y final, recorrer cada tiempo utilizando dos variables i & j

$start = "09:00"; 
    $end = "18:00"; 
    $strEnTim = strtotime("10.00"); 

    $slotStart = strtotime($start); 
    $slotEnd = strtotime($end); 
    $slotNow = $slotStart; 

    for($i=$slotStart, $j=$strEnTim; $i, $j<=$slotEnd; $i+=3600, $j+=3600) 
    { 
     if(($i < $slotNow) && ($j < $strEnTim)) continue; 
     Slot::create([ 
      'start_time' => date("H:i",$i), 
      'end_time' => date("H:i", $j) 
     ]); 
    }