从JSON响应中检索所有数字行

时间:2016-07-02 10:42:44

标签: php json laravel guzzle

使用Guzzle我正在使用API​​。 API将为我提供一个包含我需要的值的有效JSON对象。我已经尝试了几种方法来检索位于响应中的值数组,但此时每个请求只能通过行号得到一个:

这是我目前的代码:

public function index () {
    //$value = "07332927917462,07332927917455";
    $client = new Client();
    $response = $client->get('https://example.com/xxx', 
                             [ 'query' => [
                             'secret' => '2acbefghijklmnop',
                             'created' => '2016-01-01']]);

    $data = json_decode($response->getBody()->getContents());
    $array = $data->products;
    $collect = collect($array);
    $unique = $collect->unique('ean');
    $unique->values()->all();


    return dd($unique[0]->ean);
  }

在我的return dd($unique[0]->ean);我只收到一个EAN值(通过号码),所以它看起来像这样;

"012345678910"

当我尝试使用return dd($unique->ean);调用它时收到错误:

Laravel response

基本上,我需要做的是获取所有行,而不仅仅是一行。所以请求会像(例如)return dd($unique[all]->ean);那样,但我不确定如何处理这个问题?

非常感谢任何帮助。

以下是仅使用dd($unique);的回复:

json

1 个答案:

答案 0 :(得分:0)

你到底想要得到什么结果?

您可以使用“reduce”从您的收藏中获取单个值。

或者,如果您只想获得“ean”的列表,请使用“map”并仅返回每行的ean:

$eans = $unique->map(function($item){
    return $item->ean;
})

似乎没有“提取”方法,但这也应该有效:

$eans = $unique->keyBy('ean')->keys();

供参考,以下是所有收集方法:

https://laravel.com/docs/5.2/collections#method-keyby