2016-06-20 7 views
0

私はJSONファイルhereを持っています。foreachループ後のJSONの比較

私はforeachのすべてのチャンネルをループしてIDを取得し、それを特定のチャンネルの配列にchannel_idがあるメンバーと比較しますが、これを正しく行う方法がわかりません。

アイデアはチャンネル名の下に<li></li>のチャンネルに現在いるユーザーのリストを持つことです。

$discord = json_decode(file_get_contents('https://discordapp.com/api/servers/'.$id.'/widget.json')); 
    if ($discord->channels) { 
    usort($discord->channels, function($a, $b) { 
     return $a->position > $b->position ? 1 : -1; 
    }); 

    echo '<ul>'; 

    foreach ($discord->channels as $channel) { 
     echo "<li>{$channel->name}</li>"; 
    } 

    echo '</ul>'; 
    } 

私のコードは今です。明らかに私は別のforeach ($discord->members as $member)を実行し、次に$member->channel_idをチェックする必要がありますが、これを適切に出力する簡単な方法は何ですか?最後に

、私がしたいと思うようなもの:

<ul> 
    <li>Channel 1 
    <ul> 
     <li>User 1</li> 
     <li>User 2</li> 
    </ul> 
    </li> 
    <li>Channel 2</li> 
    <li>Channel 3 
    <ul> 
     <li>User 3</li> 
    </ul> 
    </li> 
</ul> 

だからチャンネル1は、その中に2人のユーザーを持って、チャンネル2は、それには、ユーザーを持っていない、チャンネル3は、その中に1人のユーザーを持っています。

希望はこれが理にかなっています。前もって感謝します。

答えて

0

これを試してみてください:

$discord = json_decode(file_get_contents('https://discordapp.com/api/servers/'.$id.'/widget.json')); 
    if ($discord->channels) { 
    usort($discord->channels, function($a, $b) { 
     return $a->position > $b->position ? 1 : -1; 
    }); 

    echo '<ul>'; 

    foreach ($discord->members as $member) { 
     if (!empty($member->channel_id)) { 
      $channel_members[$member->channel_id][] = $member->username; 
     } 
    } 

    foreach ($discord->channels as $channel) { 
     echo "<li>{$channel->name}"; 
     if (!empty($channel_members[$channel->id])) { 
      echo '<ul>'; 
      foreach ($channel_members[$channel->id] as $username) { 
       echo "<li>$username</li>"; 
      } 
      echo '</ul>'; 
     } 
     echo "</li>"; 
    } 

    echo '</ul>'; 
    } 
関連する問題