我有一个返回数据的查询,如下所示:
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));
}
最佳答案
您需要检查 $releases
中的 $id
条目是否已经存在,如果存在,则将新的格式值与其现有的 releaseformat< 合并
值。像这样:
while ( $stmt->fetch() ) {
if (isset($releases[$id])) {
$releases[$id]['releaseformat'][] = $format;
}
else {
$releases[$id] = array('releaseid'=>$id, 'releasename'=>$name, 'releaseformat'=>array($format));
}
}
这将为您提供如下所示的值:
[1] => Array
(
[releaseid] => 1
[releasename] => erbr
[releaseformat] => Array
(
[0] => CD
[1] => DVD
)
)
关于php - 使用准备语句时如何创建多维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55584952/