Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php & mysql] Zrzucanie wyniku z mysql'a do tablicy
Forum PHP.pl > Forum > PHP
Jawor
Witam

Mam pytanie czy oplacalne jest tworzenie funkcji ktora zrzucalaby w petli wynik danego zapytania do tablicy dwuwymiarowej (wiecej niz jeden rekord), a nastepnia zwracalaby ta tablice poprzez return ?

Za:
- bardziej przejrzysta i poukladana struktura kodu
- po wywolaniu funkcji operacja na samej tablicy

Przeciw:
- niepotrzebne powtarzanie dwoch petli - jedna to odczyt z bazy i wrzucanie do tablicy, druga to odczyt z tablicy

Czy w tym przypadku oplaca sie tworzyc dodatkowa funkcje ?
Oczywiscie moge sobie napisac oba sposoby i porownac czas wykonania ale niestety same wyniki czasowe za wiele mi nie mowia.
webdice
Na takich operacjach opierają się wszystkie systemy szablonów. Musisz iść na kompromisy między optymalizacją a przejrzystością i wygodą pracy.
Jawor
Ok. W takim razie postanowilem zrobic to sposobem opisanym w pierwszym poscie.
Niestety mam pewne problemy :/

Jezeli funkcja zwraca mi tablice jednowymiarowa to robie tak:

  1. <?php
  2. list($id, $from, $to) = message_show();
  3. ?>


wtedy dane pola zawieraja sie w zmiennych "id, from, to".


Sprawa sie troche komplikuje jak mam tablice dwuwymiarowa.
Proboje to robic tak ...

Miejsce w funkcji gdzie wrzucam wynik zapytania do tablicy dwuwymiarowej.
  1. <?php
  2.  
  3. $i = 0;
  4.  
  5. while ($result = mysql_fetch_array($query))
  6. {
  7.  
  8. $msg_list[$i]['id'] = $result['id'];
  9. $msg_list[$i]['msg_from'] = $result['msg_from'];
  10. $msg_list[$i]['msg_to'] = $result['msg_to'];
  11. $msg_list[$i]['subject'] = $result['subject'];
  12. $msg_list[$i]['text'] = $result['text'];
  13. $msg_list[$i]['date'] = $result['date'];
  14. $msg_list[$i]['status'] = $result['status'];
  15.  
  16. $i++;
  17.  
  18. }
  19.  
  20. return $msg_list;
  21.  
  22. ?>


Pozniej juz poza funkcja proboje ja pobrac nastepujaco ...

  1. <?php
  2.  
  3. list($id, $msg_from, $msg_to, $subject, $text, $date, $status) = message_show_list();
  4.  
  5. $i = '0';
  6.  
  7. while (!empty($id[$i]))
  8. {
  9. echo $id[$i]; // przykladowo chce tutaj wyswietlic wszystkie pola id ktore zostaly pobrane z baz
  10.  
  11. $i++;
  12. }
  13.  
  14. ?>


Niestety to nie dziala.
Wyswietla tylko:

Kod
Notice: Undefined offset: 6 in C:Program Files...test.php on line 63

Notice: Undefined offset: 5 in C:Program Files...test.php on line 63

Notice: Undefined offset: 4 in C:Program Files...test.php on line 63

Notice: Undefined offset: 3 in C:Program Files...test.php on line 63

Notice: Undefined offset: 2 in C:Program Files...test.php on line 63


Myslalem aby funkcje list() wywolywac w petli i po jednym wierszu pobierac dane ale wydajniej bedzie zrobic to za jednym razem.

Bede wdzieczny za jakies wskazowki jak to rozwiazac.
kossa
  1. <?php
  2. $i = 0;
  3. ?>


jak dodajesz apostrofy to jest wartość traktowana jako string, to tak na szybko

Łukasz
Jawor
Już sprawdzalem zarowno z apostrofami jak i bez ale problem tkwi w czym innym :/
Jakies pomysly ?
Kicok
Sypią się błędy, bo twoja zmienna $id zawiera:
Kod
array(
  $msg_list[0]['id']
  $msg_list[0]['msg_from']
  $msg_list[0]['msg_to']
  $msg_list[0]['subject']
  $msg_list[0]['text']
  $msg_list[0]['date']
  $msg_list[0]['status']
)

$msg_from zawiera:
Kod
array(
  $msg_list[1]['id']
  $msg_list[1]['msg_from']
  $msg_list[1]['msg_to']
  $msg_list[1]['subject']
  $msg_list[1]['text']
  $msg_list[1]['date']
  $msg_list[1]['status']
)

itd.


Zamień miejscami [$i] i ['id'] (analogicznie dla wszystkich elementów tablicy $msg_list), to ruszy.



[EDIT]
Jednak nie ruszy:
Cytat("MANUAL")
Notatka: list() działa tylko z tablicami o indeksach liczbowych zakładając że indeksy zaczynają się od 0.


Chyba że ominiesz to w ten sposób:
  1. <?php
  2.  
  3. list( $a, $b, $c ) = array_values( twojaFunkcja() );
  4.  
  5. ?>
Jawor
Bardzo dziekuje za pomoc !

Co do tych indeksow to zmienilem na liczbowe, gdyz wlasciwie nie ma to zadnego znaczenia. Trzeba unikac rzeczy zbednych winksmiley.jpg
I tak w funkcji list() definiuje zmienne ktore beda uzywane poza funkcja.

Jeszcze raz dzieki.
Pozdrawiam
J.
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.