Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] wartosc tablicy jako jej klucz
uncuncunc
post
Post #1





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 1.04.2012

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


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
nospor
post
Post #2





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




zamiast fetchAll użyj fetch() i sam buduj tablicę jak ci się żywnie podoba
Go to the top of the page
+Quote Post
uncuncunc
post
Post #3





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 1.04.2012

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


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





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

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


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





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 1.04.2012

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


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





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


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;


Ten post edytował markonix 5.09.2012, 18:52:57
Go to the top of the page
+Quote Post
uncuncunc
post
Post #7





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 1.04.2012

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


Dzięki. Właśnie miałem to w złej kolejności i mylił mnie inny print_r wcześniej.
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: 4.10.2025 - 00:18