2009-07-23 16 views
21

czy można to zrobić? (Tutaj jest mój kod)PHP dla pętli z 2 zmiennymi?

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

chcę coś takiego:

var 0 jest 10

var 1 9

var 2 wynosi 8 ...

Ale mój kod jest błędny, daje ogromną listę. Php guru, pomóż mi!

Odpowiedz

51

Spróbuj tego:

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

dwóch zmiennych $i i $k są inicjowane z 0 i 10 odpowiednio. Na końcu każdej pętli $i zostanie zwiększona o jeden ($i++) i $k zmniejszony o jeden ($k--). Tak więc $i będzie miało wartości 0, 1, ..., 10 i $k wartości 10, 9, ..., 0.

+6

+1 - nawet nie wiedziałem, że możesz to zrobić! –

+0

Och, wow. Nie miałem pojęcia, że ​​ustawiłeś wiele zmiennych w pętli for. Miły. – Sampson

+0

Biorąc pod uwagę, co oznacza składnia pętli for, ma to sens ... –

1

Nie powinieneś używać dwóch pętli for dla tego, co chcesz osiągnąć, kiedy " ponownie zapętlać 121 razy łącznie (11x11). To, czego naprawdę chcesz, to po prostu zadeklarowanie licznika poza pętlą, która śledzi j, a następnie zmniejszenie j wewnątrz pętli.

Edytuj: Dzięki Gumbo za złapanie włączenia dla mnie.

+0

W rzeczywistości jest to 11 · 11 = 121 (od 0 do 10 włącznie). – Gumbo

+0

Ach, tak, nawet tego nie widziałem. – AlbertoPL

0

Aby rozwinąć inne (poprawne) odpowiedzi, to co robiłeś nazywa się zagnieżdżanie pętli. Oznacza to, że dla każdej iteracji zewnętrznej pętli (pierwszej) kończyłeś całą wewnętrzną pętlę. Oznacza to, że zamiast 11 wyjść, można uzyskać 11 + 11 + 11 + ... = 11 * 11 wyjść

1

Jeżeli, jak Twój kod wygląda, masz dwie wartości uruchomionych odwrotny kierunek, może po prostu odjąć:

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

Ale myślę, że naprawdę nie jest czego chcesz? Ponadto należy uważać na sugerowane comma operator. Chociaż jest to fajna rzecz, może powodować niegrzeczne efekty uboczne w innych językach, takich jak C and C++, ponieważ PHP implementuje to inaczej.

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

Można też dodać warunek dla drugiej zmiennej

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

starałem się uzyskać czas rozpoczęcia i zakończenia i przechowywać w bazie danych, biorąc pod uwagę czas rozpoczęcia i zakończenia, ci pętlę przez każdą czas używając dwóch zmiennych 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) 
     ]); 
    }