Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zagnieżdżone pętlę while
Forum PHP.pl > Forum > Przedszkole
knet4
Witam,

Mam problem z wykonywaniem pętli w skrypcie:
  1. <?php
  2. header('Content-type: text/html;charset=utf-8');
  3. $uchwyt = fopen ("plik.csv","r");
  4. $stacjo = fopen ("export.csv","r");
  5. echo '<table border="0" width="500">';
  6. echo '<tr align="center" bgcolor="#DDDDDD">'.'<td width="200">'."Centrum".'</tr>'.'<br>';
  7. echo '</table>';
  8. echo '<table border="0" width="500" >';
  9. $a=1;
  10. $b=2;
  11. while (($data2 = fgetcsv($stacjo, 1000, ";")) !== FALSE)
  12. {
  13. echo 'petla1 '.$a.'<br />';
  14. $a++;
  15. while (($data = fgetcsv($uchwyt, 1000, ";")) !== FALSE)
  16. {
  17. echo 'petla2 '.$b.'<br />';
  18. $b++;
  19. if($data[2]== "Hurt.H01")
  20. {
  21. if($data2[9]== $data[9])
  22. {
  23. echo '<tr align="center" bgcolor="#DDDDDD">'.'<td width="200">'.$data[9].'<td width="100">'.$data2[10].'<td width="100">'.$data[10].'</td>'.'</td>'.'</td>'.'</tr>';
  24. echo '<tr align="center" bgcolor="silver">'.'<td width="200">'.'<td width="100">'.'<td width="100">'.'</td>'.'</td>'.'</td>'.'</tr>';
  25. }
  26. else
  27. {
  28. echo '<tr align="center" bgcolor="#DDDDDD">'.'<td width="200">'.$data[9].'<td width="100">'.$data2[5].'<td width="100">'.$data[10].'</td>'.'</td>'.'</td>'.'</tr>';
  29. echo '<tr align="center" bgcolor="silver">'.'<td width="200">'.'<td width="100">'.'<td width="100">'.'</td>'.'</td>'.'</td>'.'</tr>';
  30. }
  31.  
  32. }
  33.  
  34. }
  35.  
  36. }
  37. echo '</table>'.'<br/>';
  38. ?>


Z tego co zauważyłem:
1. Wykonuje się pierwsza pętla while po po raz pierwszy.
2. Otwiera druga pętla która wykonuje się x razy, aż będzie spełniony warunek.
3. Po raz drugi wykonuje się pierwsza pętla, ale tym razem omija już 2 pętlę while - dlaczego?

Cytat
petla1 1
petla2 2
petla2 3
petla2 4
petla2 5
petla2 6
petla2 7
petla2 8
petla2 9
petla2 10
petla1 2
petla1 3
petla1 4
petla1 5
petla1 6
petla1 7
petla1 8
petla1 9
petla1 10
petla1 11
petla1 12
kreatiff
Wskaźnik pliku dla $uchwyt po przejrzeniu całego pliku (czyli zagnieżdżonej pętli po raz pierwszy) znajduje się na jego końcu.
Trzeba go przewinąć przed każdą pętlą wykonywaną ponownie na tym samym uchwycie do pliku.
Wstaw przed drugą pętlę while rewind($uchwyt);
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.