【发布时间】:2020-06-26 17:25:54
【问题描述】:
我想组合来自 2 个不同端点的两个 json。我的第一个端点返回为 array1
$array1 ='[
{
"id": "410",
"title": "Title 1",
"description": "Lorem ipsum sit amet dolor",
"featured": null
},
{
"id": "411",
"title": "Title 1",
"description": "Lorem ipsum sit amet dolor",
"featured": null
},
{
"id": "412",
"title": "Title 1",
"description": "Lorem ipsum sit amet dolor",
"featured": null
}
]';
第二个端点返回为array2
$array2 = '[
{
"id": "410",
"title": "Title 1",
"description": "Lorem ipsum sit amet dolor",
"contents": "Lorem ipsum sit amet dolor Lorem ipsum sit amet dolor",
"status": "publish",
"featured": null
},
{
"id": "411",
"title": "Title 1",
"description": "Lorem ipsum sit amet dolor",
"contents": "Lorem ipsum sit amet dolor Lorem ipsum sit amet dolor",
"status": "draft",
"featured": null
},
{
"id": "412",
"title": "Title 1",
"description": "Lorem ipsum sit amet dolor",
"contents": "Lorem ipsum sit amet dolor Lorem ipsum sit amet dolor",
"status": "publish",
"featured": null
},
{
"id": "413",
"title": "Title 1",
"description": "Lorem ipsum sit amet dolor",
"contents": "Lorem ipsum sit amet dolor Lorem ipsum sit amet dolor",
"status": "draft",
"featured": null
},
{
"id": "414",
"title": "Title 1",
"description": "Lorem ipsum sit amet dolor",
"contents": "Lorem ipsum sit amet dolor Lorem ipsum sit amet dolor",
"status": "draft",
"featured": null
}
]';
这2个响应组合成一个数组后,我需要根据状态进行过滤,我下面的php脚本没有按预期返回结果:
$array1 = json_decode($json1, true);
$array2 = json_decode($json2, true);
$status_filter = 'publish';
foreach ($array2 as $value) {
$id = $value['id'];
$status = $value['status'];
$key = array_search($id, array_column($array1, 'id'));
$key2 = array_search($status, array_column($array1, 'status'));
if (isset($array1[$key]) && isset($array1[$key]['description'])) {
$array1[$key]['contents'] = $value['contents'];
$array1[$key]['status'] = $status_filter;
}
}
$json1 = json_encode($array1);
$expected = array_filter($array1, function ($status) use ($status_filter) {
if (strpos($status['status'],$status_filter) !== false){
return true;
}
});
foreach ($expected as $k => $v)
$output[] = (is_string($k) ? ('"' . $k . '":') : '') . json_encode($v);
echo '[' . implode(',', $output) . ']' . PHP_EOL;
回报:
[
{
"id": "410",
"title": "Title 1",
"description": "Lorem ipsum sit amet dolor",
"status": "publish",
"featured": null
},
{
"id": "411",
"title": "Title 1",
"description": "Lorem ipsum sit amet dolor",
"status": "publish",
"featured": null
},
{
"id": "412",
"title": "Title 1",
"description": "Lorem ipsum sit amet dolor",
"status": "publish",
"featured": null
}
]
我的预期结果需要将$array1 和$array2 组合起来,然后在id 中与其他status 对象匹配到$array1。最后,我对最终用户的预期回应是:
[
{
"id": "410",
"title": "Title 1",
"description": "Lorem ipsum sit amet dolor",
"status": "publish",
"featured": null
},
{
"id": "412",
"title": "Title 1",
"description": "Lorem ipsum sit amet dolor",
"status": "publish",
"featured": null
}
]
我被我的 php 脚本的第一个响应卡住了,这就是为什么 id 411 的 json 仍然返回(在错误的状态值内)。
感谢您的建议
【问题讨论】:
-
您控制这些端点吗?比如,你能改变他们返回的方式吗?
-
我只控制第二个端点。 :(
-
应该没问题。您能否向我们展示您用于生成该端点的代码?
-
我假设第一个端点对于
featured、title、description的值通常不同? -
是的,第一个端点总是以
null返回featured,但title和description与第二个端点相同。但我需要转换对使用status使用此api 的用户的响应并仅过滤publish:(