Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pętla While
Forum PHP.pl > Forum > Przedszkole
hucker100
Witam.

Mój problem polega na tym że muszę odpowiedzieć na pytanie dlaczego w pętli While a konkretnie
while ($line = pg_fetch_array($res, null, PGSQL_ASSOC)), znajduje się tylko jeden znak = a nie dwa znaki ==.
Podobno jest to jakaś sztuczka.

Bardzo proszę o pomoc.
k_@_m_i_l
Znak = to znak przypisania wartośći, == to znak porównania dwóch wartości.
To nie jest żadna sztuczka,bo
  1. <?php
  2. while ($line= pg_fetch_array($res, null, PGSQL_ASSOC))
  3. ?>

ta pętla działa dotąd dopóki są jakieś rekordy ze zmiennej $res.
l0ud
Kilka porad co do zrozumienia tego problemu...

  1. <?php
  2.  
  3. $a = 'tekst';
  4. echo $b = $a;
  5.  
  6. ?>


Co zwróci ten kod? 'tekst' - bo zmiennej $b przypisaliśmy wartość $a i ta $b została przekazana do echo.


Podobnie jest z warunkami

  1. <?php
  2.  
  3. $a = 'tekst';
  4.  
  5. if (($b = $a) === 'tekst') {
  6. echo 'działa';
  7. }
  8.  
  9. ?>


Zwróci 'działa', bo przypisaliśmy do $b wartość $a i porównaliśmy z ciągiem 'tekst' (=== - jest identyczny)


Twój kod:
  1. <?php
  2. while ($line = pg_fetch_array($res, null, PGSQL_ASSOC))
  3. ?>


Można zapisać też tak:

  1. <?php
  2. while (($line = pg_fetch_array($res, null, PGSQL_ASSOC)) != false)
  3. ?>


Co każde wykonanie pętli do $line będzie przypisywana wartość funkcji pg_fetch_array(). O ile przypisana wartość $line nie wynosi false (a to zwraca funkcja pg_fetch_array() gdy zabraknie wierszy) pętla się wykona.

Dlaczego mój zapis jest analogiczny do Twojego?

Najpierw, co zwraca porównanie (przez == lub ===)?
  1. <?php
  2. $a = 1;
  3. $b = 2;
  4.  
  5. var_dump($a == $b);
  6. ?>


Zwracaja true lub false. (przykład zwróci false).

A jak działają warunki w PHP? [i przez to pętle również]
  1. <?php
  2. if (true) {
  3. echo 'warunek z true działa';
  4. }
  5.  
  6. if (false) {
  7. echo 'warunek z false działa';
  8. }
  9. ?>

Warunek z true zadziała, z false nie. Czyli jeżeli umieścisz porównanie w warunku, jego wynik będzie brany pod uwagę - true lub false. W zależności od niego warunek/pętla się wykona.

Ale bez porównania też się da smile.gif Ogólnie warunki i pętle zadziałają wtedy, gdy przekażemy do nich cokolwiek innego od 0, false i null (pustki).
Porób sobie testy w stylu:
  1. <?php
  2.  
  3. if ('asd') {
  4. echo 'działa';
  5. }
  6.  
  7. ?>

(zadziała)

W Twoim kodzie do pętli przekazujesz wartość funkcji pg_fetch_array() - otrzymuje ona tablicę więc się wykona. Dopiero na końcu dostaje ona false i się przerywa. Umieszczenie porównania (jak w moim kodzie) spowoduje przekazywanie do pętli tylko jego wartości (true albo false) ale w praktyce kod zrobi to samo. smile.gif

Domyślam się że strasznie nagmatwałem, ale nie umiem inaczej tego opisać winksmiley.jpg Pisz jakbyś czegoś nie zrozumiał.

Pozdrawiam
-hucker100-
Wielkie dzięki kolego.
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.