Php 如何在两个JSON对象上进行连接?
在PHP上可以在两个不同的列名称(idlid)上连接两个JSON吗?JSONs看起来是这样的:Php 如何在两个JSON对象上进行连接?,php,json,Php,Json,在PHP上可以在两个不同的列名称(idlid)上连接两个JSON吗?JSONs看起来是这样的: [{"id":504,"displayname":"Jack","idname":"Work"},{"id":505,"displayname":"Peter","idname":"Home"}] [{"id":12,"role_id":1800,"prv":2,"lid":504},{"id":20,"role_id":1800,"prv":2,"lid":505}] [{“id”:504,“d
[{"id":504,"displayname":"Jack","idname":"Work"},{"id":505,"displayname":"Peter","idname":"Home"}]
[{"id":12,"role_id":1800,"prv":2,"lid":504},{"id":20,"role_id":1800,"prv":2,"lid":505}]
[{“id”:504,“displayname”:“Jack”,“idname”:“Work”},{“id”:505,“displayname”:“Peter”,“idname”:“Home”}]
[{“id”:12,“角色id”:1800,“prv”:2,“lid”:504},{“id”:20,“角色id”:1800,“prv”:2,“lid”:505}]
输出应如下所示:
[{"id":504,"displayname":"Jack","idname":"Work","id":12,"role_id":1800,"prv":2,"lid":504},{"id":505,"displayname":"Peter","idname":"Home","id":20,"role_id":1800,"prv":2,"lid":505}]
[{“id”:504,“displayname”:“Jack”,“idname”:“Work”,“id”:12,“role_id”:1800,“prv”:2,“lid”:504},{“id”:505,“displayname”:“Peter”,“idname”:“Home”,“id”:20,“role_id”:1800,“prv”:2,“lid”:505}]
提前感谢您的帮助。这里的问题是,您的JSON中会有同名的密钥。从理论上讲,这个答案就是你想要的:
但是,如果您需要自定义合并算法,则以下操作有效:
$json1 = json_decode($json1String, true);
$json2 = json_decode($json2String, true);
$mergedJson = array();
foreach($json1 as $values)
{
foreach($json2 as $values2)
{
if($values['id'] == $values2['lid'])
{
$mergedJson[] = array_merge_recursive($values, $values2);
break;
}
}
}
$finalJsonString = json_encode($mergedJson);
这是非常基本的。我正在使用数组合并递归函数,但您不需要使用它。您很可能需要更多的代码来手动合并数组。但这应该是一个很好的起点。您的示例输出不是有效的JSON。它在每个对象中都有重复的属性id
。你的意思是在最后一个数组中有4个对象而不是2个吗?@Michael:实际上,JSON并不要求键是唯一的。发布的预期结果是有效的。@FelixKling Fair engouh-不是无效的,但第一个id
仍将被覆盖。我相信他希望第二个数组的lid
和第一个数组的id
之间有一个SQL连接。我认为解决多重定义属性的方法是获取第二个数组的id和lid,并丢弃第一个数组的id。无论如何,我会用一个手动循环来解决这个问题,但我相信有更多PHP知识的人知道一个内置函数。通常有一个。好的,我在第一个JSON列名中更改为join,现在两个JSON都有“lid”列。当我尝试这段代码时,它被合并了,但是是随机的。问题2:我有两个非常相似的JSON,就像以前一样,我想加入它们,但类似于SQL LEFT join。