Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]petla while
Forum PHP.pl > Forum > Przedszkole
cinio
Dlaczego taka pętla mi nie działa?
<?php
  1. <?php
  2. $tekst[1] = 'lol';
  3. $tekst[2] = 'lol';
  4. $tekst[3] = 'lol';
  5. $tekst[4] = 'lol';
  6. $tekst[5] = 'lol';
  7. $tekst[6] = 'lol';
  8. $tekst[7] = '';
  9.  
  10. $x = 1;
  11. while($x <= 7 && $tekst[$x] == '') {
  12. echo $x;
  13. $x++; 
  14. }
  15.  
  16. ?>

Ma się pokazać 7, ale cos nie bardzo to działa.
babejsza
Cytat(cinio @ 29.06.2006, 22:25 ) *
Dlaczego taka pętla mi nie działa?
<?php
  1. <?php
  2. $tekst[1] = 'lol';
  3. $tekst[2] = 'lol';
  4. $tekst[3] = 'lol';
  5. $tekst[4] = 'lol';
  6. $tekst[5] = 'lol';
  7. $tekst[6] = 'lol';
  8. $tekst[7] = '';
  9.  
  10. $x = 1;
  11. while($x <= 7 && $tekst[$x] == '') {
  12. echo $x;
  13. $x++; 
  14. }
  15.  
  16. ?>

Ma się pokazać 7, ale cos nie bardzo to działa.


  1. <?php
  2. $tekst[1] = 'lol';
  3. $tekst[2] = 'lol';
  4. $tekst[3] = 'lol';
  5. $tekst[4] = 'lol';
  6. $tekst[5] = 'lol';
  7. $tekst[6] = 'lol';
  8. $tekst[7] = '';
  9.  
  10. $x=1;
  11. while($x < count($tekst)) {
  12. $x++; 
  13. }
  14. echo $x;
  15. ?>
Gość
Odsyłam do lektury dla początkujących, czyli logika dla mocno początkujących tongue.gif

  1. <?php
  2. while($x <= 7 && $tekst[$x] == '') {
  3. ?>


czyli: dopóki:
  1. $x jest mniejsze od 7
  2. $tekst[$x] jest puste

ale przeciez $tekst[$x] na początku nigdy nie będzie puste bo przypisałeś `lol`...

Teraz trochę teorii: pierwszy warunek spełniony = TRUE, drugi warunek = FALSE.
TRUE v FALSE = FALSE

Pętla nigdy się nie wykona i skrypt nic nie zwróci.
dr_bonzo
Panie filozof-logik, troche sie pan zagalopowal:
nie
TRUE v FALSE = FALSE
tylko
TRUE ^ FALSE = FALSE
iloczyn logiczny
biggrin.gif
Gość
e pisałem z buta i pomylily mi sie literki.. jasne ze o iloczyn chodziło mondralo tongue.gif biggrin.gif
cinio
Chyba jestem taki ciemny że nic nie rozumiem. Zaprezentuje mój tok myślenia, żeby było wiadmomo o co chodzi będę używał "i" zamiast ^


  1. <?php
  2. while($x <= 7 && $tekst[$x] == '') {
  3. ?>


Rozpisze pętle, a wy powiedzcie co robie źle:

podczas gdy x = 1 i tekst[1] == '' => FALSE, bo tekst = lol
podczas gdy x = 2 i tekst[2] == '' => FALSE, bo tekst = lol
podczas gdy x = 3 i tekst[3] == '' => FALSE, bo tekst = lol
podczas gdy x = 4 i tekst[4] == '' => FALSE, bo tekst = lol
podczas gdy x = 5 i tekst[5] == '' => FALSE, bo tekst = lol
podczas gdy x = 6 i tekst[6] == '' => FALSE, bo tekst = lol
podczas gdy x = 7 i tekst[7] == '' => TRUE, bo tekst = ''
i w ostatnim teraz powinno wykonać się wyrażenie zawarte pomiędzy { }

Tak jak pisał gość na początku tekst nigdy nie będzie puste, bo jest przypisana wartość lol, ale za to w 7 przypadku tekst będzie pusty więc powinno zadziałać.

Zgłupiałem przez taki prosty przykład...
nospor
Cytat
Tak jak pisał gość na początku tekst nigdy nie będzie puste, bo jest przypisana wartość lol, ale za to w 7 przypadku tekst będzie pusty więc powinno zadziałać.
ale ty zanim zaczniesz wymyslac takie teorie to luknij do manuala i zobacz jak sie zachowuje while...
jesli dla while warunek nie jest spelniony to konczy ono swoje dzialanie. nie czeka az dojdzie do spelnienia warunku.

proszę poprawić tytuł o znacznik zgodnie z zasadami forum Przedszkole:
Temat: Tematyka i zasady panujace na forum Przedszkole
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.