Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PDO] foreach i FETCH_KEY_PAIR
Forum PHP.pl > Forum > PHP
WebCM
  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)] aarambo.gif
nospor
przeciez za pierwszym razem nie pobierasz zadnych rekordow a jedynie ustawiasz tryb
WebCM
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()?
nospor
nie wiem o co ci chodzi...
zrob sobie print_r($res) a dowiesz sie ze tam nie ma zadnego array w array
WebCM
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 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 smile.gif

Temat nieaktualny.
Riklaunim
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 biggrin.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.