如何将MySQL查询结果中的fid、mid字段合并为parents JSON数组
相关术语
- 关联数组(PHP):PHP中以字符串为键存储键值对的数组类型,是构造输出结构的基础
- JSON序列化:将服务端的数组/对象转换为JSON格式字符串的过程,对应接口输出数据的最后一步
- SQL字段别名:SQL查询中为字段或计算结果自定义返回名称的语法
- 数组变换:对原始查询结果数组做新增、删除、修改字段的操作
- 空值兼容处理:对数据库返回的NULL值做过滤或转换的逻辑,避免输出不符合预期的无效值
需要学习的核心内容
1. PHP基础数组操作
你需要掌握以下基础操作:
- 给数组新增自定义键值对的方法,用来新增
parents字段 unset()函数的使用,用来删除输出结果中不需要的原始fid、mid字段- 基础的数组过滤逻辑,可以根据业务需求决定是否要把NULL值的fid/mid过滤掉,不放入parents数组
2. PHP JSON处理函数
- 掌握
json_encode()函数的使用,以及JSON_UNESCAPED_UNICODE、JSON_NUMERIC_CHECK等常用参数的作用,避免输出的JSON出现中文乱码、数字被转成字符串的问题 - 了解
json_decode()的用法,方便后续处理JSON格式的输入数据
3. 可选:MySQL JSON函数
如果不想在PHP层处理数据,也可以学习MySQL的JSON相关函数,直接在查询阶段拼装好需要的结构:
- 掌握
JSON_ARRAY()函数的用法,可直接在SQL中把fid、mid字段拼接为JSON数组,自定义别名为parents,省去PHP层处理的步骤
快速实现示例
PHP层处理方案
// $products 为从数据库查询得到的原始数据数组 foreach ($products as &$row) { $parents = []; if (!is_null($row['fid'])) { $parents[] = $row['fid']; } if (!is_null($row['mid'])) { $parents[] = $row['mid']; } $row['parents'] = $parents; // 删除不需要的原始字段 unset($row['fid'], $row['mid']); } // 输出最终JSON echo json_encode($products, JSON_UNESCAPED_UNICODE);
SQL层直接生成方案
SELECT uid, id, sex, JSON_ARRAY(fid, mid) AS parents, firstname, lastname, description, image FROM product_data;
内容的提问来源于stack exchange,提问作者Liam Nugent
相关产品推荐
相关产品推荐

