У меня есть запрос, который возвращает данные следующим образом:
releaseid | name | format |
---------------------------
1 | erbr | CD
1 | erbr | DVD
2 | name | CD
3 | test | CD
4 | yo | CD
4 | yo | CASETE
5 | hey | 8 TRACK
Обратите внимание, что некоторые releaseid
имеют более одного формата.
В PHP я использую подготовленный операторчтобы инициализировать массив следующим образом:
$conn = fn_connect(); // my function to connect to db
$q = 'SELECT ....';
$stmt = $conn->prepare($q);
$stmt->bind_param('i', $recordingid);
$stmt->execute();
$stmt->bind_result($id, $name, $format);
$stmt->store_result();
$num_rows = $stmt->num_rows;
if ( $num_rows > 0 ) {
$releases = array();
while ( $stmt->fetch() ) {
$releases[$id] = array('releaseid'=>$id, 'releasename'=>$name, 'releaseformat'=>$format);
}
}
$stmt->free_result();
$stmt->close();
Как вы можете видеть, когда я зацикливаюсь, я группирую данные по releaseid
, а когда releaseid
имеет более 1 формата,он сохраняет только последний формат:
Array
(
[1] => Array
(
[releaseid] => 1
[releasename] => erbr
[releaseformat] => DVD
)
[2] => Array
(
[releaseid] => 2
[releasename] => name
[releaseformat] => CD
)
...
)
Я пытаюсь создать многомерный массив, чтобы я мог сохранить все форматы releaseid
Я пытался использовать следующее, но опять же, он сохраняет последний формат
while ( $stmt->fetch() ) {
$releases[$id] = array('releaseid'=>$id, 'releasename'=>$name, array('format'=>$format));
}