我有两张桌子。一个是'演示'和其他人一样,'喜欢'。
我正在使用json_encode将值数组转换为json格式。
演示有:
[{ 'id': 1, 'like_id': 2, 'name': 'hero' }, { 'id': 2, 'like_id': 1, 'name': 'villain' }]
喜欢有:
[{ 'id': 1, 'movie'': 'castle' }, {'id': 2, 'movie' : 'superman' }]
我想创建一个新的json数据,如下所示:
[{ 'id': 1, 'like_id': [{'id': 2, 'movie' : 'superman'}], 'name': 'hero'},
{ 'id': 2, 'like_id': [{'id': 1, 'movie': 'castle'}], 'name': 'villain'}]
搜索了一会后,我想我可能需要递归功能。但我不确定在这种情况下我怎么写。
这是我试过的:
$pages = array();
$demo = Object('demo');
$like = Object('like');
foreach ($demo as $d) {
foreach ($like as $l) {
$response = array(
'id' => $d['id'],
'like_id' => array(
'id' => $l['id'],
'movie' => $l['movie']
),
'name' => $d['name']
);
array_push($pages, $response);
}
}
$res = json_encode($pages);
echo $res;
答案 0 :(得分:1)
问题在于,您没有检查id
中的$like
是否与like_id
中的$demo
相匹配,因此您正在制作所有组合。
foreach ($demo as $d) {
foreach ($like as $l) {
if ($d['like_id'] == $l['id']) {
$response = $d;
$response['like_id'] = array(array('id' => $l['id'],
'movie' => $l['movie'])
);
array_push($pages, $response);
}
}
}
答案 1 :(得分:1)
使用json_decode
和str_replace
(准备正确解码)功能的解决方案:
$demo = "[{ 'id': 1, 'like_id' : 2, 'name': 'hero' }, { 'id': 2, 'like_id': 1, 'name': 'villain' }]";
$likes = "[{ 'id': 1, 'movie': 'castle' }, {'id': 2, 'movie' : 'superman' }]";
$demo_objects = json_decode(str_replace("'",'"',$demo));
$like_objects = json_decode(str_replace("'",'"',$likes));
foreach ($demo_objects as $o) {
foreach ($like_objects as $l) {
if ($l->id == $o->like_id) $o->like_id = [$l];
}
}
print_r(json_encode($demo_objects));
输出:
[
{"id":1,"like_id":[{"id":2,"movie":"superman"}],"name":"hero"},
{"id":2,"like_id":[{"id":1,"movie":"castle"}],"name":"villain"}
]