Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] wartosc tablicy jako jej klucz
Forum PHP.pl > Forum > Przedszkole
uncuncunc
Pobieram dane z bazy przy pomocy PDO, otrzymuję taką tablicę

  1. [0] => Array
  2. (
  3. [id] => 31
  4. [day] => 0
  5. [open] => 0
  6. [close] => 0
  7. [closed] => 0
  8. )
  9.  
  10. [1] => Array
  11. (
  12. [id] => 32
  13. [day] => 6
  14. [open] => 12:00
  15. [close] => 14:40
  16. [closed] => 0
  17. )
  18.  
  19. )


Jak zrobić, aby wartość [day] był jej kluczem? Chciałbym do tej tablicy przypasować inną tablicę z nazwami dnia tygodnia od 0-6, tylko nie wiem jak... Pomysł z zamianą klucza wydawał się najrozsądniejszy... Czy można pobierając dane z bazy już to zrobić od razu?
nospor
zamiast fetchAll użyj fetch() i sam buduj tablicę jak ci się żywnie podoba
uncuncunc
Właśnie tak kombinuję...
  1. $oh = $db->pdo-> prepare('SELECT * FROM hours WHERE id=:id');
  2. $oh-> bindParam(':id', $id, PDO::PARAM_INT);
  3. $oh-> execute();
  4. return $oh-> fetch();


Jednak to nie zwraca wszystkich wyników a tylko pierwszy. i patrząc w manual, nie bardzo wiem jakby miał to zbudować.
abort
Ja tam w PDO fachowcem nie jestem, ale...
jest w PDO coś takiego jak FETCH_ASSOC, jest w PHP pętla while...
Jest też manual na sieci, w którym napisali:
Cytat
PDOStatement::fetch
(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
PDOStatement::fetch — Fetches the next row from a result set

No i jest też fajny 'EXAMPLE #2', gdzie dokładnie taka konstrukcja (połączenie tego o czym pisałem) występuje.
uncuncunc
Tylko że fetch zwraca 1 wynik z całej listy wdłóg ID w bazie

Cytat
id|day
22|0
22|1
22|2


Pobieram całość
  1. $oh-> fetchAll(PDO::FETCH_ASSOC);

I mam wynik tablicy jak w 1 poście... Nie wiem tylko jak to zamienić...

Czytając manual

  1. $oh = $db->pdo-> prepare('SELECT * FROM hours WHERE id=:id');
  2. $oh-> bindParam(':id', $id, PDO::PARAM_INT);
  3. $oh-> execute();
  4.  
  5. while ($row = $oh-> fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT)) {
  6. //$data = $row[2] . "\t" . $row[4] . "\t" . $row[5] . "\n";
  7. $data = array($row['day'] => $row);
  8. pr($data);
  9. }


Coś do końca nie działa bo jest tworzona tablica w tablicy:

Cytat
Array
(
[0] => Array
(
[id] => 31
[day] => 0
[open] => 0
[close] => 0
[closed] => 0
)

)
Array
(
[6] => Array
(
[id] => 32
[day] => 6
[open] => 12:00
[close] => 14:40
[closed] => 0
)

)


I nie wiem jak ją zwrócić przez return, bo zatrzymuje while.
markonix
Zwracaj ją po pętli a co do generowania tablicy to źle robisz.

  1. // zainicjuj
  2. $data = array();
  3. // pętla
  4. $data[$row['day']] = $row;
uncuncunc
Dzięki. Właśnie miałem to w złej kolejności i mylił mnie inny print_r wcześniej.
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.