Laravel-将数组转换为雄辩的集合

时间:2019-01-04 16:35:23

标签: php arrays laravel collections eloquent

我需要使用API​​中的数据。

我创建一个函数:

    public function getItems()
{
    $client = new \GuzzleHttp\Client();
    $res = $client->get('https://app.example.com/api/getItems');

$vouchers = json_decode($res->getBody(), true);

dd($vouchers);

return view('api', compact('vouchers'));


}

dd($vouchers)返回我:

enter image description here

现在,当我尝试将$ vouchers数组与刀片引擎一起使用时:

<body>
              @foreach ($vouchers as $v)
                <p>{{$v->name}}</p>
              @endforeach
          </body>

我遇到错误:

"Trying to get property 'name' of non-object (View: .... etc...

如何将数组转换为雄辩的集合。 我使用最新的Laravel 5.7版本

2 个答案:

答案 0 :(得分:2)

实际上您的$vouchers是一个数组数组,

因此,您可能希望将子数组转换为对象:

您可以简单地使用:

foreach ($vouchers['vouchers'] as $key => $value) {
    $vouchers['vouchers'][$key] = (object) $value;
}

..或使用集合:

$vouchers = collect($vouchers['vouchers'])->map(function ($voucher) {
    return (object) $voucher;
});

答案 1 :(得分:1)

这是因为数组具有索引。 您可以执行以下操作:

@for ($i = 0; $i < count($vouchers); $i++)
    <p>{{$vouchers[$i]->name}}</p>
@endfor

更新

如果它们每个都包含另一个数组,则可以尝试以下方法:

@for ($i = 0; $i < count($vouchers); $i++)
    <p>{{$vouchers[$i][0]->name}}</p>
@endfor