2016-06-02 4 views
0

私はバックエンドサービスから返されたJSONを持っています。php-check 2要素と同じものと見合うもの

$a='{ 
    "post_id": [ 
     "1", 
     "34", 
     "29", 
     "35", 
     "28", 
     "37" 
    ], 
    "posted_by": [ 
     "1", 
     "1", 
     "1", 
     "1", 
     "1", 
     "3" 
    ], 
    "total_likes": [ 
     4, 
     1, 
     1, 
     1, 
     1, 
     1 
    ] 
}'; 

JSONにはpost_id、posted_by、投稿が何件あるかがあります。 私は私の配列はこのようになります

$data = json_decode($a); 

PHPで処理するための配列に変換:

stdClass Object 
(
    [post_id] => Array 
     (
      [0] => 1 
      [1] => 34 
      [2] => 29 
      [3] => 35 
      [4] => 28 
      [5] => 37 
     ) 

    [posted_by] => Array 
     (
      [0] => 1 
      [1] => 1 
      [2] => 1 
      [3] => 1 
      [4] => 1 
      [5] => 3 
     ) 

    [total_likes] => Array 
     (
      [0] => 4 
      [1] => 1 
      [2] => 1 
      [3] => 1 
      [4] => 1 
      [5] => 1 
     ) 

) 

posted_byがユーザーです。私がしようとしているのは、ユーザーがどれくらいの好きなものを受け取り、その値を新しい配列に保存するかを見つけることです。この場合、ユーザー1は8つの好きを受け取り、ユーザー3は1つの好きなものを受け取りました。そして、私はこれを配列に保存しなければなりません。

これを達成するために、私はこのようなものを試しましたが、結果は得られませんでした。 n回目にループを実行すると、未定義のオフセットエラーが表示されます。

$total_likes=0; 
     $data2=array(); 

     for($j=0; $j<sizeof($data['posted_by']);$j++) 
     { 
      if($data['posted_by'][$j] == $data['posted_by'][$j+1]) 
      { 
       $data2[$j]['user']  = $data['posted_by'][$j]; 
       $data2[$j]['likes']  = $total_likes + $data['total_likes'][$j]; 
      } 

     } 

このようなチェックを行う機能はありますか?

+0

これを '$ data = json_decode($ a、TRUE);'として使用してコード内で使用するように連想配列にします。 – Saty

答えて

1

私はこのような何かをreccomandう=> 1、 'nbLike' => 8]、 ['user' => 3、 'nbLike' => 1]、 ]

0

はこれを試してください:あなたは$ listUserLike内のすべての結果

listUserLike = [ [ 'ユーザー' を持っているでしょう

$data = json_decode($a); 
// list of all user sid 
$users = array_unique($data['posted_by']); 
$listUserLike = []; 

foreach($users as $user) { 
    $indexes = array_keys($data['posted_by'], $user); 
    $likes = array_intersect_key($data['total_likes'], array_flip($indexes)); 
    $listUserLike[] = ['user' => $user, 'nbLike' => array_sum($likes)]; 
} 

$cnt = 0; 
$temp = array(); 
$newArr = array(); 
foreach($data['posted_by'] as $user) { 
    if(in_array($user, $temp)) { 
     $newArr[$user] = $newArr[$user] + $data['total_likes'][$cnt]; 
    } else { 
     $temp[$user] = $user; 
     $newArr[$user] = $data['total_likes'][$cnt]; 
    } 
    $cnt++; 
} 
print '<pre>';print_r($newArr); 
exit; 
関連する問題