web-dev-qa-db-fra.com

Php pour la boucle avec 2 variables?

est-il possible de faire cela? (voici mon code)

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

Je veux quelque chose comme ça:

var 0 est 10

var 1 est 9

var 2 est 8 ...

Mais mon code est faux, cela donne une liste énorme. Gourou Php, aidez moi !!

26
jingleboy99

Essaye ça:

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

Les deux variables $i et $k sont initialisées avec 0 et 10 respectivement. À la fin de chaque boucle, $i sera incrémenté de un ($i++) et $k sera décrémenté de un ($k--). Donc, $i aura les valeurs 0, 1,…, 10 et $k les valeurs 10, 9,…, 0.

58
Gumbo

Vous ne devriez pas utiliser deux boucles for pour ce que vous souhaitez réaliser, car vous faites 121 fois la boucle (11x11). Ce que vous voulez vraiment, c’est juste qu’un compteur soit déclaré en dehors de la boucle qui suit j, puis décrémente j à l’intérieur de la boucle.

Edit: Merci Gumbo d'avoir attrapé l'inclusion pour moi.

1
AlbertoPL

Si votre code ressemble à deux valeurs, vous pouvez simplement les soustraire:

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

Mais je suppose que ce n'est pas vraiment ce que tu veux? Aussi, soyez prudent avec l'opérateur de virgule suggéré . Bien que ce soit une bonne chose, cela peut provoquer des effets secondaires méchants dans d'autres langages comme C et C++ as PHP l'applique différemment.

1
bluebrother

Vous pouvez également ajouter une condition pour la deuxième variable

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

Pour développer les autres réponses (correctes), ce que vous faisiez s'appelle imbrication boucles. Cela signifie que pour chaque itération de la boucle externe (la première), vous complétiez la totalité de la boucle interne. Cela signifie qu'au lieu de 11 sorties, vous obtenez 11 + 11 + 11 + ... = 11 * 11 sorties

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

J'ai essayé d'obtenir une heure de début et de fin et de stocker dans la base de données, étant donné une heure de début et de fin, vous passez en boucle à chaque fois en utilisant deux 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)
        ]);
   }
0
Chika Ugwuanyi