php - PHP - 合并附加多个json数组
问题描述
我需要合并/加入多个包含数组的 json 字符串(也需要合并),但我不知道实现此目的的最佳方法是什么:
json 字符串的初始数组(在下面的示例中称为 $rrDatas):
Array
(
[0] => {"asset":[1],"person":[1]}
[1] => {"asset":[2]}
)
预期结果 :
{"asset":[1,2],"person":[1]}
主要的困难是数组的数量是不确定的(我的例子是用 2 个数组但它可能是 3,4 等)。第二个困难是可以有多个属性(如“资产”、“人”等,但总是数组)。这些可能的属性是已知的,但很多,所以如果算法是动态的会更好。
我现在能做的:
$mergedAssets['asset'] = [];
foreach ($rrDatas as $rrData)
{
$rrDataJson = \GuzzleHttp\json_decode($rrData, true);
$mergedAssets['asset'] = array_merge($mergedAssets['asset'],$rrDataJson['asset']);
}
$result = \GuzzleHttp\json_encode($mergedAssets, true);
结果 :
{"asset":[1,2]}
这很好用,但这不是动态的,我应该为每个可能的属性(即“人”等)复制这部分吗?
谢谢,纪尧姆
编辑:Brett Gregson 和 krylov123 在下面的回答帮助我建立了自己的解决方案,这是两种建议的混合:
$mergedJson = [];
foreach ($rrDatas as $rrData)
{
$rrDataJson = \GuzzleHttp\json_decode($rrData, true);
foreach(array_keys($rrDataJson) as $property)
{
$mergedJson[$property] = array_merge($mergedJson[$property] ?? [], $rrDataJson[$property]);
}
}
return \GuzzleHttp\json_encode($mergedJson, true);
在下面找到一个更好的例子:
$rrDatas = Array (
[0] => {"asset":[1,2],"person":[1],"passive":[1]}
[1] => {"asset":[3],"charge":[1],"passive":[2]}
)
这必须导致:
{"asset":[1,2,3],"person":[1],"passive":[1,2],"charge":[1]}
编辑 2:我刚刚尝试过 Progrock 的解决方案,它似乎也能完美运行:https ://3v4l.org/7hSqi
解决方案
推荐阅读
- packer - 设置自定义 VPC、子网和安全组时 Packer SSH 超时
- android-studio - 为什么我会收到消息:冗余覆盖方法?
- html - 一切都左对齐
- ruby-on-rails - 如何从 Rails 论坛应用程序中的帖子评论中提取用户的电子邮件?
- python - 将列表传递给 __init__() 方法时超出最大递归深度错误
- xmpp - 如何在 XMPP Server 中的两个用户之间创建多个独立对话?
- javascript - 使用复选框创建键值对
- postgresql - postgres 函数 SELECT INTO
- reactjs - 在 react-mic 中隐藏可视化设置的画布元素
- java - If..Else 语句在 JFrame 程序中的行为不可预测(不确定?)