Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Bardzo dziwny problem - pytanie
Forum PHP.pl > Forum > PHP
ultra_18
Witam, zadałem zapytanie do bazy i otwrzymałem wynik w moim przypadku
$wiersz[0] i $wiersz[1] każdy z nich ma dokładnie 4 wartości, mój problem wyglada nastepująco:

gdy kod wyglada tak :

CODE
for ($licznik = 0; $wiersz = mysql_fetch_row($zapytanie); ++$licznik)
{
$tablica_xxx[$licznik] = $wiersz[0];
$tablica_yyy[$licznik] = $wiersz[1];
echo "$tablica_xxx[$licznik] - $tablica_yyy[$licznik]
";
}


wtedy wszystko gra wyświetla mi elegancko to co trzeba


ale kiedy zapisuje to tak :

CODE
for ($licznik = 0; $wiersz = mysql_fetch_row($zapytanie); ++$licznik)
{
$tablica_xxx[$licznik] = $wiersz[0];
$tablica_yyy[$licznik] = $wiersz[1];
}




for ($licznik = 0; $wiersz = mysql_fetch_row($zapytanie); ++$licznik)
{
echo "$tablica_xxx[$licznik] - $tablica_yyy[$licznik]
";
}

nic sie nie wyświetla , a gdy zapisuje w ten sposób :

CODE
for ($licznik = 0; $wiersz = mysql_fetch_row($zapytanie); ++$licznik)
{
$tablica_xxx[$licznik] = $wiersz[0];
$tablica_yyy[$licznik] = $wiersz[1];
}




for ($licznik = 0; count($tablica_xxx); ++$licznik)
{
echo "$tablica_xxx[$licznik] - $tablica_yyy[$licznik]
";
}


owszem wyświetla wyniki ale oprócz tego rozszerza mi strone aż do nieskończoności tak jak by petla nie była "domknieta"



Czemu tak sie dzieje, gdzie popelniłem błąd i jak to rozwiązać z góry dzieki za pomoc
mike
Instrukcje w pętli będą się wykonywać dopóki warunek w pętli jest spełniony. A jak Twój warunek wygląda? count($tablica_xxx); Po zrzutowanieu tego na boolean to ma wartość zawsze true więc pętla kręci się w nieskoczoność.
ultra_18
Cytat(mike @ 30.10.2008, 12:43:37 ) *
Instrukcje w pętli będą się wykonywać dopóki warunek w pętli jest spełniony. A jak Twój warunek wygląda? count($tablica_xxx); Po zrzutowanieu tego na boolean to ma wartość zawsze true więc pętla kręci się w nieskoczoność.



funkcja count podobnie jak sizeof zwraca liczbe elementow tablicy wiec można ja użyć w pętli tyle że tamto wyrażnie było nie poprawne, prawidłowo powinno tak wyglądać:

CODE
for ($licznik = 0; $licznik <= (count($tablica_xxx) - 1); $licznik++)
kaem
Jeśli chodzi o ten drugio przypadek:
  1. <?php
  2. for ($licznik = 0; $wiersz = mysql_fetch_row($zapytanie); ++$licznik)
  3. {
  4. $tablica_xxx[$licznik] = $wiersz[0];
  5. $tablica_yyy[$licznik] = $wiersz[1];
  6. }
  7.  
  8.  
  9.  
  10.  
  11. for ($licznik = 0; $wiersz = mysql_fetch_row($zapytanie); ++$licznik)
  12. {
  13. echo "$tablica_xxx[$licznik] - $tablica_yyy[$licznik]
  14. ";
  15. }
  16. ?>

to podejrzewam, że przed tymi dwoma forami nie zadeklarowałes zmiennej tablicowej $tablica i dlatego są one traktowane lokalnie.
Czyli w 1 pętli for tworzy tablice i coś tam do niej wpisuje, ale po wyjściu z niej tablice są usuwane. Dlatego też w drugiej pętli nic nie wyswietla, bo w $tablica_xxx i $tablica_yyy nic nie już nie ma.
pinochet
drugim parametrem pętli for jest warunek wyjścia interpreter wykonuje instrukcję tam zawarta i sprawdza jej wartość: 0 - false cokolwiek innego true
twoje programy:
mają:
  1. <?
  2. for ($licznik = 0; $wiersz = mysql_fetch_row($zapytanie); ++$licznik) {
  3. }
  4. ?>

interpreter przed każdym przebiegiem pętli wykonuje:
$wiersz = mysql_fetch_row($zapytanie);
mysql_fetch_row zwraca jakiś resource który jest po zrzutowaniu równy true - różny od zera albo false gdy przejżysz juz wszystki wiersze(z dokumentacji), wtedy oczywiście warunek wyjścia jest spełniony i pętla się przerywa
jeżeli po tym zapisie znowu wykonasz mysql_fetch_row na tej samej zmiennej - funkcja zwroci false i wogole nie wejdzie do drugiej pętli

jesli chodzi o pętle z count
count zwraca wartośc liczbową równą ilości elementów w tablicy = jeżeli ilość tych elementów jest różna od zera wartosc po zrzutowaniu będize true i pętla wykona kolejny obieg. Można używać count tak jak ty to użyłeś na początku ale wtedy warto by było gdzieś w pętli usuwac kolejne elementy tablicy np array_pop

Polecam manual: for, mysql_fetch_row, count ;-) abys rozumiał co piszesz
ultra_18
Cytat(kaem @ 30.10.2008, 13:27:59 ) *
Jeśli chodzi o ten drugio przypadek:
[...]

to podejrzewam, że przed tymi dwoma forami nie zadeklarowałes zmiennej tablicowej $tablica i dlatego są one traktowane lokalnie.
Czyli w 1 pętli for tworzy tablice i coś tam do niej wpisuje, ale po wyjściu z niej tablice są usuwane. Dlatego też w drugiej pętli nic nie wyswietla, bo w $tablica_xxx i $tablica_yyy nic nie już nie ma.


zadeklarowałem :
CODE

$tablica_xxx = array();
$tablica_yyy = array();


jeśli o to chodzi.

Dziekuje za pomoc temat można zamknąć.
JoShiMa
ultra_18 chyba sprytniej jest tak:
for ($licznik = 0; $licznik < count($tablica_xxx); $licznik++)

Niby drobiazg, ale jednak trochę operacji mniej do zrobienia tongue.gif
nospor
@Joshima jak juz mowisz o mniejszej liczbie operacji, to moglabys jeszcze nie zostawiac tego count() w forze tongue.gif
JoShiMa
No mogłabym tongue.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.