Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] przekształcenie tablicy (spłaszczenie?)
mlawnik
post 23.07.2013, 10:56:23
Post #1





Grupa: Zarejestrowani
Postów: 455
Pomógł: 49
Dołączył: 12.04.2010

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


Witam,

Czy ktoś mógłby mnie nakierować w jaki sposób tablicę pobraną przez PDO::FETCH_ASSOC:

array
0 =>
array
'subjectId' => string '1' (length=1)
'subjectName' => string 'biologia' (length=8)
1 =>
array
'subjectId' => string '2' (length=1)
'subjectName' => string 'chemia' (length=6)
2 =>
array
'subjectId' => string '3' (length=1)
'subjectName' => string 'fizyka' (length=6)
3 =>
array
'subjectId' => string '4' (length=1)
'subjectName' => string 'geografia' (length=9)
4 =>
array
'subjectId' => string '5' (length=1)
'subjectName' => string 'historia' (length=8)
5 =>
array
'subjectId' => string '6' (length=1)
'subjectName' => string 'j. niemiecki' (length=12)
6 =>
array
'subjectId' => string '7' (length=1)
'subjectName' => string 'j. polski' (length=9)
7 =>
array
'subjectId' => string '8' (length=1)
'subjectName' => string 'matematyka' (length=10)
8 =>
array
'subjectId' => string '9' (length=1)
'subjectName' => string 'muzyka' (length=6)
9 =>
array
'subjectId' => string '10' (length=2)
'subjectName' => string 'plastyka' (length=8)
10 =>
array
'subjectId' => string '11' (length=2)
'subjectName' => string 'wi' (length=2)

Przekształcić do takiej postaci:

array
1 => string 'biologia' (length=8)
2 => string 'chemia' (length=6)
3 => string 'fizyka' (length=6)
4 => string 'geografia' (length=9)
5 => string 'historia' (length=8)
6 => string 'j. niemiecki' (length=12)
7 => string 'j. polski' (length=9)
8 => string 'matematyka' (length=10)
9 => string 'muzyka' (length=6)
10 => string 'plastyka' (length=8)


Pozdrawiam,
mlawnik


--------------------
Pozdrawiam,
mlawnik

Cytat(nospor)
Jedzmy gówno.... miliony much nie może się przecież mylić
Go to the top of the page
+Quote Post
nospor
post 23.07.2013, 11:02:04
Post #2





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




Przelatujesz po tej tablicy przy pomocy FORECH i w kazdym obrocie FOREACH tworzysz swoja wlasna plaską tablice.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
skowron-line
post 23.07.2013, 11:08:19
Post #3





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


Chyba że masz już php 5.5 wtedy wystarczy Ci
http://www.php.net/manual/en/function.array-column.php
a jak nie to patrz w komentarze


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
mlawnik
post 23.07.2013, 11:13:05
Post #4





Grupa: Zarejestrowani
Postów: 455
Pomógł: 49
Dołączył: 12.04.2010

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


php 5.5 będę sobie musiał skompilować tongue.gif

Dobra, rozwiązałem.

Dla potomnych:

  1. <?php
  2. //convert array
  3. $subjectIdsNew = array();
  4. foreach($subjectIds as $key=>$val)
  5. {
  6. foreach ($val as $value) {
  7. $subjectIdsNew[$key+1] = $value;
  8. }
  9. }
  10. ?>


PS o, fajne to array_column, zapamiętam sobie.

EDIT Jeszcze dla potomnych bez php >= 5.5

implementacja array_column w plain php
https://github.com/ramsey/array_column

Ten post edytował mlawnik 23.07.2013, 11:21:40


--------------------
Pozdrawiam,
mlawnik

Cytat(nospor)
Jedzmy gówno.... miliony much nie może się przecież mylić
Go to the top of the page
+Quote Post
nospor
post 23.07.2013, 11:15:25
Post #5





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




facepalmxd.gif

  1. $subjectIdsNew = array();
  2. foreach($subjectIds as $key=>$val)
  3. {
  4. $subjectIdsNew[$val['subjectId']] = $val['subjectName'];
  5. }


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mlawnik
post 23.07.2013, 11:23:32
Post #6





Grupa: Zarejestrowani
Postów: 455
Pomógł: 49
Dołączył: 12.04.2010

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


Powinno być +1 przy key.

@nospor, dziękuję za gotowca, wykorzystam go.

Mógłbyś mi jednak wytłumaczyć co zrobiłem źle? tzn. Działa, ale skoro w twoim poście wystąpił facepalm, to coś jest nie tak.


--------------------
Pozdrawiam,
mlawnik

Cytat(nospor)
Jedzmy gówno.... miliony much nie może się przecież mylić
Go to the top of the page
+Quote Post
nospor
post 23.07.2013, 11:26:40
Post #7





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




Nie, twoj kod nie dziala poprawnie. CHciales jako klucz przeciez miec wartosc pola subjectId a nie wartosc klucza tablicy zwroconej przez PDO.... to chyba zasadnicza roznica, nie sadzisz? I nie, zadne +1 tutaj nie pomoze, bo gdy twoje wartosci z pola subjectId beda zupelnie rozne lub z dziurami to twoj algorytm szlag trafia.

Poza tym robisz dwukrony foreach, przez co twoj skrypt wykonuje 2 x wiecej operacji. Jakby pol bylo np.4 to by robil 4x wiecej operacji. I tez przypisuje ci cudem wartosc z pola subjectName tylko dlatego ze to pole jest ostatnie. Jakby nie bylo ostatnie to bys tej wartosci w wynikowej tablicy nie mial.

A teraz jeszcze raz przyjrzyj sie mojemu kodowi po przeczytaniu tych uwag.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mlawnik
post 23.07.2013, 11:36:32
Post #8





Grupa: Zarejestrowani
Postów: 455
Pomógł: 49
Dołączył: 12.04.2010

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


  1. $subjectIdsNew = array();
  2. foreach($subjectIds as $key=>$val)//Czy to key jest tutaj potrzebne?
  3. {
  4. $subjectIdsNew[$val['subjectId']] = $val['subjectName'];
  5. }


Poniższe działa dobrze:
  1. $subjectIdsNew = array();
  2. foreach($subjectIds as $val)
  3. {
  4. $subjectIdsNew[$val['subjectId']] = $val['subjectName'];
  5. }


--------------------
Pozdrawiam,
mlawnik

Cytat(nospor)
Jedzmy gówno.... miliony much nie może się przecież mylić
Go to the top of the page
+Quote Post
nospor
post 23.07.2013, 11:37:42
Post #9





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




Nie, w tym wypadku $key nie jest potrzebne


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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 Wersja Lo-Fi Aktualny czas: 18.07.2025 - 23:49