在PHP中合并两个json
我有两个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
[{"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)。这两个变量用于数组合并。