循环访问JSON数组并在表格中显示结果 - Laravel 5.2

时间:2016-05-04 00:26:56

标签: php json laravel laravel-5.2

这个问题可能已被多次提出,但我无法得到解决方案。

我正在调用这样的API:

public function getLeaderBoardArray($leaderBoardStats) {
        $array = [];
        $ex = $leaderBoardStats;

        dd($ex);

        return $array;
    }

这是我在(DD)(Die-Dump it)时得到的结果:

{#201 ▼
  +"Start": 0
  +"Count": 100
  +"ResultCount": 100
  +"Results": array:100 [▼
    0 => {#199 ▼
      +"Player": {#186 ▼
        +"Gamertag": "Ferro2Clutch"
        +"Xuid": null
      }
      +"Rank": 1
      +"Score": {#195 ▶}
    }
    1 => {#188 ▶}
    2 => {#200 ▶}
    3 => {#203 ▶}
    4 => {#206 ▶}
    5 => {#209 ▶}
    6 => {#212 ▶}
....... and so on till 100

如何循环播放此数组并显示Players Gamertag。

这就是我现在正在做的事情:

 public function getLeaderBoardArray($leaderBoardStats) {
        $array = [];
        $array['Gamertag_1'] = $leaderBoardStats->Results[0]->Player->Gamertag;
        $array['Csr_1'] = $leaderBoardStats->Results[0]->Score->Csr;

        $array['Gamertag_2'] = $leaderBoardStats->Results[1]->Player->Gamertag;
        $array['Csr_2'] = $leaderBoardStats->Results[1]->Score->Csr;

        // and so on til 10....

        return $array;
    }

正如你所看到的,对于每个领导者来说,这将是一件痛苦的事情。

是否有更简单的方法,比如以某种方式为每个循环做一个?

2 个答案:

答案 0 :(得分:3)

你昨天问了一个非常相似的问题,我今天会给你一个非常相似的答案。

https://laravel.com/docs/5.2/collections

使用map()收集功能将每个项目转换为更易于消化的数组。

$results = collect($leaderBoardStats->Results);
$gamers  = $results->map(function($item, $key)
{
    return [
        'gamertag' => $item->Player->Gamertag,
        'csr'      => $item->Score->Csr,
    ]
});

这会给你一个看起来像......

的数组
[
    ['gamertag' => "name", 'csr' => 11111],
    ['gamertag' => "name", 'csr' => 11111],
    ['gamertag' => "name", 'csr' => 11111],
    ['gamertag' => "name", 'csr' => 11111],
];

然后,在您的视图中,您可以执行此操作来构建表。

@foreach ($gamers->all() as $gamer)
<tr>
    <td>{{ $gamer['gamertag'] }}</td>
    <td>{{ $gamer['csr'] }}</td>
</tr>
@endforeach

所需要的一切。 Laravel Collections可能是整个框架中最强大的方面之一,并且非常强大且构建良好。如果您有与数组相关的问题,那么文档可能会有与集合相关的答案。

答案 1 :(得分:1)

你可以写一个简单的循环来迭代你的结果。例如,我喜欢使用foreach循环

$array = [];

foreach ($leaderBoardStats->Results as $stat) {
    array[] = [
        'gamer_tag' => $stat->Player->Gamertag,
        'csr'       => $stat->Score->Csr
    ];
}

return $array;

更好的更高级方法是对此进行映射,这样您就不必创建任何额外的数组。

   return array_map(function ($stat) {
       return [
           'gamer_tag' => $stat->Player->Gamertag, 
           'csr' => $stat->Score->Csr
       ];
   }, $leaderBoardStats->Results);