2016-06-21 19 views
0

私は2つのテーブルを持っています。 1つは「デモ」、もう1つは「好き」です。PHPの2つのテーブルIDに基づいて配列を作成します

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

あなたは再帰を必要としません。ちょうどネストされた 'foreach'ループ。 – Barmar

+0

結果に 'like_id'で配列が必要なのはなぜですか? 'Demo'にはID番号が1つしかないので、' Like'のオブジェクトに置き換えてください。 – Barmar

+0

@Barmarネストされたforeachを試しました。しかし、それはより多くの回数を倍数化して結果を印刷します。 – Kasino

答えて

1

問題は、あなたが$likeid$demolike_idに一致するかどうかをチェックしていないので、あなたはすべての組み合わせを生産しているということです。

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

+0

$ response = $ d;うまくいかないようです。しかし、$ response = array( 'id' => 1、name => 'hero');というように追加しようとしました。これは、可能な全ての組み合わせに対して繰り返される。上記のようにしようとすると、$ response ['like_id']は動作しません。助言がありますか ? – Kasino

+0

私は閉じた括弧がないので、まったく動かないでしょう。私はあなたが間違った場所にそれを加えたと思います。私は 'like_id'オブジェクトを配列の余分なレベルに置くことも忘れていました(私はまだあなたがそれを持っている理由を理解していません)。私はこれらの両方を修正し、今コードは動作します、ideone.comのデモを見てください。 – Barmar

+0

ありがとう:-) – Kasino

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"} 
] 
関連する問題