在PHP中合并两个json

在PHP中合并两个json,php,json,merge,Php,Json,Merge,我有两个json 第一个是 [{"COLUMN_NAME":"ORDER_NO","COLUMN_TITLE":"Order Number"} ,{"COLUMN_NAME":"CUSTOMER_NO","COLUMN_TITLE":"Customer Number"}] 第二个是 [{"COLUMN_NAME":"ORDER_NO","DEFAULT_VALUE":"1521"}, {"COLUMN_NAME":"CUSTOMER_NO","DEFAULT_VALUEE":"C143

我有两个json

第一个是

    [{"COLUMN_NAME":"ORDER_NO","COLUMN_TITLE":"Order Number"}
,{"COLUMN_NAME":"CUSTOMER_NO","COLUMN_TITLE":"Customer Number"}]
第二个是

[{"COLUMN_NAME":"ORDER_NO","DEFAULT_VALUE":"1521"},
{"COLUMN_NAME":"CUSTOMER_NO","DEFAULT_VALUEE":"C1435"}]
我想合并它们,并有一个类似json的

[{"COLUMN_NAME":"ORDER_NO","COLUMN_TITLE":"Order Number","DEFAULT_VALUE":"1521"}
,{"COLUMN_NAME":"CUSTOMER_NO","COLUMN_TITLE":"Customer Number","DEFAULT_VALUEE":"C1435"}]
有没有办法合并它们?如果需要更改JSON的结构,对我来说也可以


谢谢。

类似于
json\u编码(数组合并(json\u解码($a,true),json\u解码($b,true))
的东西应该可以工作

在官方PHP文档中

在官方PHP文档中

编辑:尝试添加
true
作为json_decode的第二个参数。这将把对象转换为关联数组

编辑2:尝试
array merge recursive
,并查看下面我的评论。抱歉,现在必须注销:(
这看起来是一个完全正确的解决方案:

成功地将其组合在一起。很可能有更好的解决方案,但这是我得到的最接近的解决方案

$a = '[{"COLUMN_NAME":"ORDER_NO","COLUMN_TITLE":"Order Number"},{"COLUMN_NAME":"CUSTOMER_NO","COLUMN_TITLE":"Customer Number"}]';
$b = '[{"COLUMN_NAME":"ORDER_NO","DEFAULT_VALUE":"1521"},{"COLUMN_NAME":"CUSTOMER_NO","DEFAULT_VALUEE":"C1435"}]';
$r = [];
foreach(json_decode($a, true) as $key => $array){
 $r[$key] = array_merge(json_decode($b, true)[$key],$array);
}
echo json_encode($r);
返回

[{"COLUMN_NAME":"ORDER_NO","DEFAULT_VALUE":"1521","COLUMN_TITLE":"Order Number"},
{"COLUMN_NAME":"CUSTOMER_NO","DEFAULT_VALUEE":"C1435","COLUMN_TITLE":"Customer Number"}]

这对我来说很有魅力

json_encode(array_merge(json_decode($a, true),json_decode($b, true)))
这里有一个完整的例子

$query="SELECT * FROM `customer` where patient_id='1111118'";

$mysql_result = mysql_query($query);

$rows = array();
while($r = mysql_fetch_assoc($mysql_result)) {
    $rows[] = $r;
}
$json_personal_information=json_encode($rows);
//echo $json_personal_information;




$query="SELECT * FROM `doctor` where patient_id='1111118'";

$mysql_result = mysql_query($query);

$rows = array();
while($r = mysql_fetch_assoc($mysql_result)) {
    $rows[] = $r;
}
$json_doctor_information=json_encode($rows);
//echo $json_doctor_information;

echo $merger=json_encode(array_merge(json_decode($json_personal_information, true),json_decode($json_doctor_information, true)));
这对我有用

$dados1=json_encode(数组('data'=>'1'));
$dados2=json_编码(数组('data2'=>'2');
echo json_编码(数组_合并(json_解码($dados1,true),json_解码($dados2,true));

1将它们转换为php数据结构2将它们合并3将它们转换回JSONTANK you以获得答案,但结果是[{“列名称”:“订单号”,“列标题”:“订单号”},{“列名称”:“客户号”,“列标题”:“客户号”},{“列名称”:“订单号”,“默认值”:“1521”},{“列名称”:“客户号”,“默认值”:“C1435”}]它正在第一个json之后添加第二个json。难道不可能只在第一个json中添加缺少的键和值吗..请查看我的预期结果查看上面的“我的编辑”。这应该更接近您需要的结果,但我猜这将返回json中作为编码数组的对象作为结果(抱歉,现在没有时间测试):(它没有改变结果。再次,它是在前一个数组之后添加数组。我现在看到了。你必须像这个函数一样递归地合并元素,但这里的问题是,当数组中有数字键时,它不会合并子元素。残酷的解决方案是首先解码所有JSON,然后在循环1中合并它们的子元素按一,然后将结果编码为json。抱歉,现在必须注销:(如我所说-下面的解决方案看起来是正确的:我一定遗漏了什么。第二个编码不会写第一个吗?@GaryCarlyleCook,因为在每次while循环之后,$rows的结果存储到不同的变量中($json_personal_information和$json_doctor_information)。这两个变量用于数组合并。