Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在两个JSON对象上进行连接?_Php_Json - Fatal编程技术网

Php 如何在两个JSON对象上进行连接?

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

在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,“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。