Witajcie mam drobny problem z pozoru bardzo prosty ale nie chodzi mi o to jak to zrobić najprościej ale o to jak to zrobić najwydajniej.
mam tablicę która składa się z danych pobranych z bazy danych
0 =>
array (
'team' => string 'Dax'
'user' => string '123'
'qualification_id' => string '12'
)
1 =>
array (
'team' => string 'Dax'
'user' => string '123'
'qualification_id' => string '9'
)
2 =>
array (
'team'=> string 'Dax'
'user' => string '123'
'qualification_id' => string '8'
)
Wyniki w tabeli różnią sie jedynie qualification id i danymi użytkownika jeśli użytkownicy sa różni..
Dane użytkownika sie powtarzają a ja chciałbym uzyskać tablicę w której dane użytkownika uzyskam raz natomiast qualification_id będzie tablicą kwalifikacji danego użytkownika.
Chciałbym aby z blisko 7000 000 wyników zrobić tabelkę w której dostanę co następuje...
result = array(
1 =>
array (
'staff' => string 'Dax'
'user' => string '187'
'qualification_ids' => array(1,7,9)
)
2 =>
array (
'staff' => string 'Joe' (length=12)
'user' => string '123' (length=4)
'qualification_ids' => array(9,5,5)
)
)
Mogę to zrobić tak:
public static function formatitemList($itemList){
$result =array();
foreach ($itemList as $item){
if (!array_key_exists($item['user'], $result)){
$item['qualification_id'] = array($item['qualification_id']);
$result[$item['user']] = $item;
}else{
$result[$item['user']]['qualification_id'][] =$item['qualification_id'];
}
}
return $result;
}
}
Wtedy dostanę tablicę indeksowaną przez id użytkowników z ich danymi i qualifications jako array. tak jak chcę, ale czy nie da się tego zrobić jakoś jeszcze bardziej optymalnie? (szkoda ze mysql nie potrafi zwrócic objektów z subsetami.. ;)