You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用PDO从MySQL结果生成指定结构的三维数组?

如何从MySQL平展结果生成指定的三维数组?

先直接给你结论:PDO没办法直接帮你生成这种嵌套的三维数组——它只能返回平展的结果集(比如每一行是一个独立的关联数组),你需要用PHP手动遍历结果来构建目标结构。

先回顾下你的需求和现有数据:
你想要的最终三维数组结构:

{
university A {
year 1 {
course 1: 10
course 2: 20
...
}
year 2 {
course 1: 15
course 2: 20
...
}
...
}
university B {
year 1 {
course 1: 10
course 2: 20
...
}
year 2 {
course 1: 15
course 2: 20
...
}
...
}
}

而你的MySQL查询返回的是平展的行数据:

uni name | year | course name | number
University A | 2014 | course_1 | 10
University A | 2014 | course_2 | 18
University A | 2015 | course_1 | 15
University A | 2015 | course_2 | 20
University B | 2014 | course_1 | 10
University B | 2014 | course_2 | 18
University B | 2015 | course_1 | 15
University B | 2015 | course_2 | 20

具体实现步骤

下面是完整的PHP+PDO代码示例,帮你把平展结果转成目标三维数组:

1. 执行查询并获取结果

首先假设你已经建立了PDO连接,执行查询并准备读取结果:

// 假设已经初始化好PDO连接 $pdo
$dbQuery = "SELECT `uni name`, `year`, `course name`, `number` FROM your_table";
$stmt = $pdo->prepare($dbQuery);
$stmt->execute();

2. 遍历结果构建三维数组

根据数据量大小,你可以选择两种方式:

方式一:一次性获取所有结果(适合小数据集)

如果数据量不大,直接把所有结果加载到内存再处理:

$flatResults = $stmt->fetchAll(PDO::FETCH_ASSOC);
$targetArray = [];

foreach ($flatResults as $row) {
    $uniName = $row['uni name'];
    $year = $row['year'];
    $courseName = $row['course name'];
    $number = $row['number'];

    // 初始化大学层级
    if (!isset($targetArray[$uniName])) {
        $targetArray[$uniName] = [];
    }
    // 初始化年份层级
    if (!isset($targetArray[$uniName][$year])) {
        $targetArray[$uniName][$year] = [];
    }
    // 赋值课程对应的数值
    $targetArray[$uniName][$year][$courseName] = $number;
}
方式二:逐行读取(适合大数据集,内存友好)

如果数据量很大,逐行读取可以避免一次性加载所有数据到内存,减少服务器压力:

$targetArray = [];

// 逐行遍历结果,内存占用更低
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $uniName = $row['uni name'];
    $year = $row['year'];
    $courseName = $row['course name'];
    $number = $row['number'];

    if (!isset($targetArray[$uniName])) {
        $targetArray[$uniName] = [];
    }
    if (!isset($targetArray[$uniName][$year])) {
        $targetArray[$uniName][$year] = [];
    }
    $targetArray[$uniName][$year][$courseName] = $number;
}

效果验证

执行完上面的代码后,$targetArray就会完全符合你想要的三维数组结构,比如打印出来会是:

Array
(
    [University A] => Array
        (
            [2014] => Array
                (
                    [course_1] => 10
                    [course_2] => 18
                )
            [2015] => Array
                (
                    [course_1] => 15
                    [course_2] => 20
                )
        )
    [University B] => Array
        (
            [2014] => Array
                (
                    [course_1] => 10
                    [course_2] => 18
                )
            [2015] => Array
                (
                    [course_1] => 15
                    [course_2] => 20
                )
        )
)

内容的提问来源于stack exchange,提问作者budgiebeaks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:12:49