
本文介绍如何将第三方 api 返回的扁平化 faq 数据(每个问题和答案分属独立数组项)按逻辑配对,合并为结构清晰的问答对象数组,适用于 wordpress 自定义字段等典型场景。
在处理来自不可控第三方 API 的 FAQ 数据时,常见模式是:同一组问答被拆分为多个独立数组元素,其 meta_key 字段遵循统一命名规则(如 faq_list_0_question 和 faq_list_0_answer),而 meta_value 才是真正需要展示的内容。由于无法修改上游输出,我们必须在 PHP 端完成智能聚合。
核心思路是基于 meta_key 提取公共标识符(如 0),并按该标识符分组归并 question 与 answer 值。以下是推荐的健壮实现:
(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..."
}
]⚠️ 注意事项:
立即学习“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 数据”的标准实践。











