0

0

如何在 PHP 中将多维数组中成对的 FAQ 问答项合并为结构化数据

霞舞

霞舞

发布时间:2025-12-30 14:08:31

|

280人浏览过

|

来源于php中文网

原创

如何在 PHP 中将多维数组中成对的 FAQ 问答项合并为结构化数据

本文介绍如何将第三方 api 返回的扁平化 faq 数据(每个问题和答案分属独立数组项)按逻辑配对,合并为结构清晰的问答对象数组,适用于 wordpress 自定义字段等典型场景。

在处理来自不可控第三方 API 的 FAQ 数据时,常见模式是:同一组问答被拆分为多个独立数组元素,其 meta_key 字段遵循统一命名规则(如 faq_list_0_question 和 faq_list_0_answer),而 meta_value 才是真正需要展示的内容。由于无法修改上游输出,我们必须在 PHP 端完成智能聚合。

核心思路是基于 meta_key 提取公共标识符(如 0),并按该标识符分组归并 question 与 answer 值。以下是推荐的健壮实现:

<?php
// 假设 $response 是原始 API 响应(已 json_decode 为关联数组)
$data = $response['data'] ?? [];

$faqs = [];
foreach ($data as $item) {
    // 安全提取 key 后缀:确保 meta_key 存在且符合预期格式
    if (!isset($item['meta_key']) || !is_string($item['meta_key'])) {
        continue;
    }

    // 拆分下划线分隔的键名,例如 'faq_list_0_question' → ['faq', 'list', '0', 'question']
    $parts = explode('_', $item['meta_key']);

    // 至少需 4 部分才能识别序号+类型(如 faq_list_N_type)
    if (count($parts) < 4) {
        continue;
    }

    // 倒数第二部分视为序号(如 '0'),最后一部分为类型('question'/'answer')
    $type = array_pop($parts);
    $index = array_pop($parts); // 获取序号,如 '0'

    // 验证序号是否为数字(增强鲁棒性)
    if (!is_numeric($index)) {
        continue;
    }

    // 初始化该序号对应的 FAQ 条目(若尚不存在)
    if (!isset($faqs[$index])) {
        $faqs[$index] = [
            'id'       => (string)$index,
            'question' => '',
            'answer'   => ''
        ];
    }

    // 根据类型存入对应值
    if ($type === 'question') {
        $faqs[$index]['question'] = $item['meta_value'] ?? '';
    } elseif ($type === 'answer') {
        $faqs[$index]['answer'] = $item['meta_value'] ?? '';
    }
}

// 转为索引数组并保持顺序(可选)
$faqs = array_values($faqs);

// 输出结果(JSON 格式示例)
echo json_encode($faqs, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
?>

输出示例

[
  {
    "id": "0",
    "question": "Lorem ipsum dolor sit amet, consectetur adipiscing elit?",
    "answer": "In at neque at nisl fringilla egestas sit amet tincidunt sem..."
  }
]

⚠️ 注意事项

Insou AI
Insou AI

Insou AI 是一款强大的人工智能助手,旨在帮助你轻松创建引人入胜的内容和令人印象深刻的演示。

下载

立即学习PHP免费学习笔记(深入)”;

  • 该方案不依赖 post_id 或 id 字段匹配,而是严格依据 meta_key 的语义结构,避免因数据错位导致问答错配;
  • 内置空值与格式校验,能安全跳过异常项,防止脚本中断;
  • 若实际 meta_key 命名规则不同(如 faq_1_q / faq_1_a),只需调整 explode 与 array_pop 的逻辑即可适配;
  • 如需保留原始 id 或 post_id,可在初始化 $faqs[$index] 时一并存入(例如 $faqs[$index]['post_id'] = $item['post_id'];),但注意确保同组问答该值一致。

此方法兼顾简洁性与生产环境所需的健壮性,是处理此类“伪结构化 API 数据”的标准实践。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

325

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

293

2025.06.11

c++标识符介绍
c++标识符介绍

本专题整合了c++标识符相关内容,阅读专题下面的文章了解更多详细内容。

179

2025.08.07

wordpress seo
wordpress seo

WordPress网站SEO优化方法有:1、选择一个SEO友好的主题,具有清晰的代码结构,快速的加载速度和响应式设计;2、使用SEO插件,优化你的标题标签,元描述,关键字,XML站点地图等;3、优化你的内容,内容是SEO优化的核心;4、优化你的网站速度;5、创建友好的URL;6、使用内部链接;7、优化图像;8、使用社交媒体;9、定期更新你的网站;10、监控和分析你的网站等等。

435

2023.09.18

wordpress下载后怎么安装
wordpress下载后怎么安装

安装前准备:确保服务器满足要求、获取安装文件、创建数据库。上传 wordpress 文件。创建数据库和用户。运行安装程序:选择语言、输入数据库信息、网站标题和管理员信息。安装 wordpress。安装后配置:设置永久链接、安装主题、安装插件、创建内容。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

336

2024.04.15

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

42

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

79

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

234

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.5万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号