php - 使用准备语句时如何创建多维数组?

标签 php mysql arrays prepared-statement

我有一个返回数据的查询,如下所示:

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/

相关文章:

java - 如何检索ArrayList(Java)的索引?

ios - 为什么我的数组不存储从 firebase 数据库检索的值?

php - PHP/MYSQL 中 num_rows 总是显示零值?

Mysql 介于两者之间

php - 标记记录已插入

php - 将 float 转换为 HH :MM format

带有嵌套 for 循环的 Python 代码太慢

php - 使用 swift ( php, json, swift ) 将图像上传到服务器

javascript - 获取网页内容并放入数组或字符串中

php - 如何设置Froala编辑器默认文本?