基于php中的两个表id创建一个数组

时间:2016-06-21 11:05:00

标签: php arrays json recursion multidimensional-array

我有两张桌子。一个是'演示'和其他人一样,'喜欢'。

我正在使用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;

2 个答案:

答案 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);
        }
    }
}

DEMO

答案 1 :(得分:1)

使用json_decodestr_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"}
]