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

如何在PHP中将SQL查询结果存储为常规关联数组?

解决PHP中SQL查询结果转为目标关联数组的问题

问题分析

当前输出是三层嵌套数组[[{"answer":"1000"}],[{"answer":"1000"}],...],原因有两个:

  1. $wpdb->get_results()默认返回多行结果的数组,哪怕单条记录也会被包裹在一个数组里;
  2. 循环调用时直接将这个数组整体追加到$answers2,导致额外的嵌套层级。

解决方案

根据你的需求场景选择对应方案:

场景1:每个question_id对应唯一一条答案

用$wpdb->get_row()替代get_results(),直接获取单行关联数组,避免多余嵌套:

protected function get_answers_with_question_id($id){
    global $wpdb;

    // 用prepare防止SQL注入,必须处理用户传入的参数
    $sql = $wpdb->prepare(
        "SELECT * FROM {$wpdb->prefix}aysquiz_answers WHERE question_id = %d",
        $id
    );

    // ARRAY_A指定返回单行关联数组
    $answer = $wpdb->get_row($sql, 'ARRAY_A');

    return $answer;
}

调用后$answers2的结构会是:

[{"answer":"1000"},{"answer":"1000"},{"answer":"1000"}]

场景2:每个question_id对应多条答案,需结构化存储

如果要以question_id为键关联对应的答案数组,修改循环逻辑:

foreach ($questions_ids as $id) {
    $answers2[$id] = $this->get_answers_with_question_id($id);
}

输出结构示例:

{
    "1": [{"answer":"1000"}],
    "2": [{"answer":"1000"}],
    "3": [{"answer":"1000"}]
}

场景3:提取所有答案值为一维关联数组

若只需保留answer值并以question_id为键:

foreach ($questions_ids as $id) {
    $answers = $this->get_answers_with_question_id($id);
    // 处理可能为空的情况,避免报错
    $answers2[$id] = $answers[0]['answer'] ?? null;
}

输出结构示例:

{"1":"1000","2":"1000","3":"1000"}

重要提醒

一定要使用$wpdb->prepare()处理SQL参数,避免SQL注入风险,这是WordPress数据库操作的最佳实践。

内容的提问来源于stack exchange,提问作者Jiří Kopřiva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:20:18