Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php & mysql] Zrzucanie wyniku z mysql'a do tablicy
Jawor
post
Post #1





Grupa: Zarejestrowani
Postów: 73
Pomógł: 2
Dołączył: 1.10.2003

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
webdice
post
Post #2


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Na takich operacjach opierają się wszystkie systemy szablonów. Musisz iść na kompromisy między optymalizacją a przejrzystością i wygodą pracy.
Go to the top of the page
+Quote Post
Jawor
post
Post #3





Grupa: Zarejestrowani
Postów: 73
Pomógł: 2
Dołączył: 1.10.2003

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
kossa
post
Post #4





Grupa: Zarejestrowani
Postów: 1 165
Pomógł: 9
Dołączył: 9.04.2002
Skąd: Toruń

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $i = 0;
  3. ?>


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

Łukasz


--------------------
Go to the top of the page
+Quote Post
Jawor
post
Post #5





Grupa: Zarejestrowani
Postów: 73
Pomógł: 2
Dołączył: 1.10.2003

Ostrzeżenie: (0%)
-----


Już sprawdzalem zarowno z apostrofami jak i bez ale problem tkwi w czym innym :/
Jakies pomysly ?
Go to the top of the page
+Quote Post
Kicok
post
Post #6





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował Kicok 26.01.2008, 20:19:37


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
Jawor
post
Post #7





Grupa: Zarejestrowani
Postów: 73
Pomógł: 2
Dołączył: 1.10.2003

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 08:46