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

如何在PHP中合并两个包含results键的JSON数组?

如何合并两个查询结果的JSON数组

看起来你是想把两个数据库查询返回的分类结果合并成一个统一的JSON结构,之前用array_combine的思路走偏了,咱们来一步步解决这个问题:

问题分析

你现在有两个数组$array1和$array2,它们都包含一个results键,对应的值是分类数据的数组。你的目标是把这两个results里的所有元素合并到同一个results数组下,再输出正确的JSON。

错误原因

你之前使用的array_combine()函数是用来将一个数组的元素作为键,另一个数组的元素作为值来创建新数组,这和你需要合并数组元素的需求完全不匹配,所以才会得到错误的结果。

正确解决方案

我们需要先获取两个查询的结果数组(注意不要在每个查询后直接输出JSON,否则会先输出两个独立的JSON串,没法合并),然后用array_merge()合并两个results数组,最后再编码输出:

第一步:修改查询代码,去掉中间的JSON输出

首先处理第一个查询,保留数组但不输出:

$query2 = "SELECT DISTINCT cat_id,cat_name FROM review WHERE user_id = ? AND public_or_private = 0"; 
$stmt2 = $con->prepare($query2) or die(mysqli_error($con)); 
$stmt2->bind_param('i', $user_id) or die ("MySQLi-stmt binding failed ".$stmt2->error); 
$stmt2->execute() or die ("MySQLi-stmt execute failed ".$stmt2->error); 
$result2 = $stmt2->get_result(); 
$array1 = array(); 
while ($row = mysqli_fetch_assoc($result2)) { 
    $array1['results'][] = $row; 
}
// 移除这里的echo json_encode($array1);

然后处理第二个查询,同样保留数组:

$query3 = "SELECT DISTINCT cat_id,cat_name FROM review WHERE public_or_private = 2"; 
$result3 = mysqli_query($con,$query3); 
$array2 = array(); 
while($row = mysqli_fetch_assoc($result3)) { 
    $array2['results'][] = $row; 
}
// 移除这里的echo json_encode($array2);

第二步:合并数组并输出最终JSON

使用array_merge()把两个results数组的元素合并,然后生成最终的JSON:

// 合并两个results数组,将$array2的元素追加到$array1的元素后面
$combinedResults = array_merge($array1['results'], $array2['results']);

// 构建目标结构的数组
$finalArray = array(
    'results' => $combinedResults
);

// 输出最终的JSON
echo json_encode($finalArray);

额外说明

  • 如果其中一个查询没有返回结果(比如$array1['results']是空数组),array_merge()也能正常工作,会直接返回另一个数组的内容。
  • 如果你想避免两个查询之间出现重复的cat_id,可以在合并后用以下方式去重(针对多维数组):
// 合并后去重
$uniqueResults = array_map("unserialize", array_unique(array_map("serialize", $combinedResults)));
$finalArray = array('results' => $uniqueResults);
echo json_encode($finalArray);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:14:53