Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z pętlą for i if
Forum PHP.pl > Forum > Przedszkole
desavil
Mam problem z małym skryptem odnośnie pętli:
  1. for($i4 = 1; $i < 100; $i4++){
  2. $i+=1;
  3. if(($i % 4) == 0 || $i == 1){ $i2+=1; echo 'START<br />'; }
  4.  
  5. echo $i.'<br />';
  6. if(($i % 3) == 0){ echo 'KONIEC<br />'; }
  7. }


Wynik jaki otrzymuję to - na początku jest dobrze, później zaczyna się sypać:
Kod
START
1
2
3
KONIEC
START
4
5
6
KONIEC
7
START
8
9
KONIEC
10
11
START
12
KONIEC
13
14
15
KONIEC
START
16
17
18
KONIEC


Chciałbym otrzymać wynik:
Kod
START
1
2
3
KONIEC
START
4
5
6
KONIEC
START
7
8
9
KONIEC
START
10
11
12
KONIEC

Męczę się już z tym parę godzin i nie umiem tego wykombinować.
Bardzo liczę na pomoc.
Sephirus
Napisz co chcesz dokładnie uzyskać. Co ma robić ten kod wink.gif
desavil
Chciałbym uzyskać wynik taki jak napisałem w drugim cytacie smile.gif

Wymyśliłem coś takiego:
  1. for($i4 = 0; $i4 < 100; $i4++){
  2.  
  3. if(($i4 % 3) == 0){ echo ' START <br />'; }
  4. echo $i4.'<br />';
  5. if($i4 == 2 || $i4 == 5 || $i4 == 8 || $i4 == 11 || $i4 == 14){ echo 'KONIEC<br />'; }
  6.  
  7. }

Tylko jak zrobić, ten warunek: ($i4 == 2 || $i4 == 5 || $i4 == 8 || $i4 == 11 || $i4 == 14), żeby był automatycznie taki.
Bez użycia dodatkowej pętli itp.
markonix
  1. echo 'START<br />';
  2. for($i = 1; $i < 100; $i++){
  3.  
  4. echo $i .'<br />';
  5. if (($i % 3) == 0)
  6. echo 'KONIEC<br />START<br />';
  7.  
  8. }
desavil
Zanim coś napiszesz, to to przetestuj smile.gif
markonix
  1. echo 'START<br />';
  2. $max = 100;
  3. for($i = 1; $i < $max; $i++){
  4. echo $i .'<br />';
  5. if (($i % 3) == 0) {
  6. echo 'KONIEC<br />';
  7. if ($i < $max -1)
  8. echo 'START<br />';
  9. }
  10. }
desavil
Nie mogę mieć 2x start.
Podałem przykład mojego kodu jak to ma wyglądać, tak to nie może być ponieważ to będzie zintegrowane z bazą danych pobieraniem rekordów w odpowiedni sposób itp.
markonix
Cytat(desavil @ 28.03.2012, 13:10:52 ) *
Zanim coś napiszesz, to to przetestuj smile.gif

Ee?
Cytat
START
1
2
3
KONIEC
START
4
5
6
KONIEC
START
7
8
9
KONIEC

Wynik dokładnie jaki chciałeś jedynie niepotrzebny "START" na końcu, który już mogłeś się wykazać i sam uwarunkować.
desavil
Ale przed pętlą podajesz start. A ja nie mogę przed pętlą tego podać tylko w pętli i tylko raz nie kilkakrotnie jak to zrobiłeś: przed i w pętli.
Sephirus
  1. $max = 100;
  2. $j = 0;
  3. $co_ile = 3;
  4. for($i = 1; $i < $max; $i++)
  5. {
  6. echo $j == 0 ? 'START<br/>' : '';
  7. echo $i.'<br/>';
  8. echo $j == $co_ile-1 ? 'KONIEC<br/>' : '';
  9.  
  10. $j = $j < $co_ile-1 ? $j+1 : 0;
  11. }


EDIT: poprawiłem mały błąd.
desavil
Idealnie smile.gif
A można to jeszcze przerobić, tak jeżeli pętla wykona się np. 8 razy to na końcu będzie również napis: KONIEC?
Sephirus
  1. $max = 100;
  2. $j = 0;
  3. $co_ile = 3;
  4. for($i = 1; $i < $max; $i++)
  5. {
  6. echo $j == 0 ? 'START<br/>' : '';
  7. echo $i.'<br/>';
  8. echo $j == $co_ile-1 || ($j != $co_ile-1 && $i == $max-1) ? 'KONIEC<br/>' : '';
  9.  
  10. $j = $j < $co_ile-1 ? $j+1 : 0;
  11. }
Rysh
Trochę prostrza metoda:
  1. for($i = 1 ; $i < 100 ; $i) {
  2. for($z = 1 ; $z <= 3 ; $z++, $i++) {
  3. if($z == 1) { echo 'START<br />'; }
  4. echo $i .'<br />';
  5. if($z == 3) { echo 'STOP<br />'; }
  6. }
  7. }

Wystarczy w 2 pętli sobie zmienić 3 na 8, czy co tam chcesz smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.