Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PDO] foreach i FETCH_KEY_PAIR, błąd PHP czy źle to robię?
WebCM
post
Post #1





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


  1. //Wyciągam 2 pola
  2. $res = $db->query('SELECT tag,num FROM ...');
  3.  
  4. //Ustawiam tryb, w którym pierwsze pole jest kluczem, a drugie wartością
  5. $res -> setFetchMode(PDO :: FETCH_KEY_PAIR);
  6.  
  7. //Chcę teraz skorzystać z tej możliwości
  8. foreach($res as $tag => $num)
  9. {
  10. var_dump($tag, $num);
  11. }

Niestety, $tag = 0 (indeks numeryczny tablicy), a $num jest tablicą:
  1. 'test' => string '3'


Teraz spójrzmy na inny przykład:
  1. //Wyciągam 2 pola
  2. $res = $db->query('SELECT tag,num FROM ...');
  3.  
  4. //Od razu wyciągam wszystkie pola z bazy
  5. $res = $res -> fetchAll(PDO :: FETCH_KEY_PAIR);
  6.  
  7. //Chcę teraz skorzystać z tej możliwości
  8. foreach($res as $tag => $num)
  9. {
  10. var_dump($tag, $num);
  11. }

Teraz wszystko w porządku - $num jest liczbą wyciągniętą z bazy, zaś $tag - słowem.

Jak poprawnie zastosować grupowanie klucz=>wartość w pętli forach?

Nie interesują mnie żadne funkcje typu key($num) oraz $num[key($num)] (IMG:style_emoticons/default/aarambo.gif)

Ten post edytował WebCM 8.03.2010, 21:46:04
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




przeciez za pierwszym razem nie pobierasz zadnych rekordow a jedynie ustawiasz tryb
Go to the top of the page
+Quote Post
WebCM
post
Post #3





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


No dobrze, ale dlaczego w takim razie do pętli foreach nie trafia tablica o strukturze:
  1. array('key' => 'value')
tylko
  1. array( array('key' => 'value') )

Czy jest na to sposób, czy jedyną opcją jest pobranie wszystkich rekordów za pomocą fetchAll()?
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




nie wiem o co ci chodzi...
zrob sobie print_r($res) a dowiesz sie ze tam nie ma zadnego array w array
Go to the top of the page
+Quote Post
WebCM
post
Post #5





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


Chyba jeszcze nie pracowałeś z PDO. Wiesz, czym są iteratory w PHP?

Druga linijka wyciąga dane z bazy. $res jest obiektem PDOStatement.
Piąta ustawia tryb FETCH_KEY_PAIR.
W ósmej odczytuję rekordy, korzystając z iteratorów obsługiwanych przez PDO (IMG:style_emoticons/default/smile.gif)

Zobacz przykłady:
http://pl2.php.net/manual/en/pdo.query.php

Ech, chyba wszystko wytłumaczyłem w pierwszych postach, ale jednak za bardzo kombinuję.

Właściwie nie potrzeba mi grupowania FETCH_KEY_PAIR. Na tablicach numerycznych lub asocjacyjnych uzyskanych przez FETCH_NUM lub FETCH_ASSOC też można wydajnie pracować, bo danych i tak nie będzie dużo (IMG:style_emoticons/default/smile.gif)

Temat nieaktualny.

Ten post edytował WebCM 8.03.2010, 22:56:47
Go to the top of the page
+Quote Post
Riklaunim
post
Post #6





Grupa: Zarejestrowani
Postów: 640
Pomógł: 44
Dołączył: 8.02.2004

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


Cytat(WebCM @ 8.03.2010, 22:55:19 ) *
Chyba jeszcze nie pracowałeś z PDO. Wiesz, czym są iteratory w PHP?


Hm... wymądrzać to się potrafisz. "Optymalizujesz" nie wiadomo co, choć i tak efekty takich "optymalizacji" są znikome/zerowe/stratą czasu. Nabierz trochę branżowego doświadczenia z optymalizacją serwisów wymagających takowych operacji zanim zaczniesz szaleć z "optymalizacją" skrypcików PHP i obrażaniem doświadczonych programistów. "przedwczesna optymalizacja" zyskuje dzięki tobie nowe znaczenie (IMG:style_emoticons/default/biggrin.gif)

Ten post edytował Riklaunim 9.03.2010, 18:05:40
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 14:10