Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: tablica asocjacyjna jako wynik funkcji
Forum PHP.pl > Forum > PHP
ktuvok
Mam funkcję, która w uproszczeniu wygląda tak:

function Zwroc($ID)
{
$SQLPobierz = "SELECT * FROM Tabela
WHERE JakiesPole = '$ID'
";
(...)
$Pobierz = mysql_query($SQLPobierz);
if (mysql_num_rows($Pobierz) == 0)
{
return FALSE;
}
else
{
return mysql_fetch_array($Pobierz);
}
}

W skrypcie napisałem sobie tak:

$Tablica = Zwroc($Zwroc);
if($Tablica != FALSE)
{
while($Tablica)
{
$Pole1 = $Tablica["Pole1"];
echo "$Pole1 <BR>";
}
}
else
{
echo "Nie ma nic!";
}

aby wyświetlić wszystkie pobrane rekordy, jeśli funkcja nie zwróci FALSE.

Ale otrzymuję błąd przekroczenia czasu wykonania skryptu na poziomie pętki
while.

Dlaczego?

Muszę to zrobić funkcją - pomóżcie.

Pozdrawiam,
Krzysiek
Jojo
Uzywaj BBCode!

Otrzymujesz błąd przekroczenia czasu, ponieważ jeśli zmienna $Tablica ma wartość różną od false, to nie ma warunku wyjścia z pętli while.
Do przechodzenia po tablicach radzę używać konstrukcji for" title="Zobacz w manualu PHP" target="_manual i foreach" title="Zobacz w manualu PHP" target="_manual.
ktuvok
Zazwyczaj piszę:

  1. <?php
  2.  
  3. while($JakaTablica = mysql_fetch_array($Zapytanie))
  4. {
  5.  //coś tam
  6. }
  7.  
  8. ?>


i jest ok, a przecież wtedy też nie ma wyjścia z pętli!

Więc na czym polega różnica?

Pozdrawiam,
Krzysiek
Jojo
Różnica polega na działaniu funkcji mysql_fetch_array. Funkcja ta zwraca kolejne rekordy wyciągnięte zapytaniem w postaci tablic, a gdy skończą się rekordy zwraca false i pętla się kończy.
ktuvok
Hmm sad.gif

Czyli nie da się tego zrobić funkcją?

K
Jojo
Wszystko się da smile.gif Mam tylko pytanie. Twoja funkcja jako parametr otrzymuje id jakiegoś rekordu. Czy w wyniku tego zapytania jest tylko jeden rekord czy może być więcej?
silent
  1. <?php
  2.  
  3. function Zwroc($ID) {
  4.   $SQLPobierz = &#092;"SELECT * FROM Tabela WHERE JakiesPole = '$ID'\";
  5.   (...)
  6.   $Pobierz = mysql_query($SQLPobierz);
  7.   $wynik=mysql_fetch_array($Pobierz);
  8.   return $wynik;
  9. }
  10.  
  11. ?>


EDIT

  1. <?php
  2.  
  3.  
  4. $Tablica = Zwroc($Zwroc);
  5. if(count($Tablica)) {
  6. foreach ($Tablica as $pole) {
  7. echo $pole['Pole1'].'<br>';
  8. }
  9. }
  10. else
  11. echo &#092;"Nie ma nic!\";
  12.  
  13. ?>
ktuvok
Może być zero, jeden lub więcej rekordów w tablicy.
Leezard
nie wiem czy o to chodzi ale tak:
hmmm wg mnie to tak: mysql_fetch_array zwraca tablice wartosci konkretnego rekordu (znaczy tego na kotrym aktuualnie znajduje sie wskaznik w recordsecie), takze zawsze dostaniesz tylko 1 rekord...

wg mnie jak chcesz zwrocic tablice rekordow to moze:

jesli jest 1 lub wiecej rekordow to:

$return_var=array();
while($wynik_zapytania=mysql_fetch_array($zapytanie))
{
$return_var[]=$wynik_zapytania;
}

return $return_var;

to pierwsza sprawa a kolejna to warunek w WHILE... uzyj do pzrzegladania tablicy FOREACH (tej konstrukcji z kluczem i wartoscia)

pisane na szybko... chyba powinno dzialac... winksmiley.jpg
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.