在JSON数组中循环并在表Laravel 5.2中显示结果


Loop through JSON Array and display results in table - 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

如何循环通过这个数组并显示玩家玩家代号。

这就是我现在正在做的:

 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;
    }

正如你所看到的,对于每个领导委员会来说,这将是一件痛苦的事情,直到100岁。

有没有一种更简单的方法,比如为每个循环做一个?

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

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集合可能是整个框架中最强大的方面之一,并且非常强大和构建良好。如果您有一个与数组相关的问题,那么文档中很可能有与集合相关的答案。

您可以编写一个简单的循环来迭代结果。例如,我喜欢使用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);