mlawnik
23.07.2013, 10:56:23
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
nospor
23.07.2013, 11:02:04
Przelatujesz po tej tablicy przy pomocy FORECH i w kazdym obrocie FOREACH tworzysz swoja wlasna plaską tablice.
skowron-line
23.07.2013, 11:08:19
Chyba że masz już php 5.5 wtedy wystarczy Ci
http://www.php.net/manual/en/function.array-column.phpa jak nie to patrz w komentarze
mlawnik
23.07.2013, 11:13:05
php 5.5 będę sobie musiał skompilować

Dobra, rozwiązałem.
Dla potomnych:
<?php
//convert array
$subjectIdsNew = array(); foreach($subjectIds as $key=>$val)
{
foreach ($val as $value) {
$subjectIdsNew[$key+1] = $value;
}
}
?>
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
nospor
23.07.2013, 11:15:25

$subjectIdsNew = array(); foreach($subjectIds as $key=>$val)
{
$subjectIdsNew[$val['subjectId']] = $val['subjectName'];
}
mlawnik
23.07.2013, 11:23:32
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.
nospor
23.07.2013, 11:26:40
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.
mlawnik
23.07.2013, 11:36:32
$subjectIdsNew = array(); foreach($subjectIds as $key=>$val)//Czy to key jest tutaj potrzebne?
{
$subjectIdsNew[$val['subjectId']] = $val['subjectName'];
}
Poniższe działa dobrze:
$subjectIdsNew = array(); foreach($subjectIds as $val)
{
$subjectIdsNew[$val['subjectId']] = $val['subjectName'];
}
nospor
23.07.2013, 11:37:42
Nie, w tym wypadku $key nie jest potrzebne
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.