Php 与Laravel 5.4发布,其中收集方法
我有一段代码:Php 与Laravel 5.4发布,其中收集方法,php,laravel,laravel-5,collections,Php,Laravel,Laravel 5,Collections,我有一段代码: if ($response && $response->getStatusCode() == 200) { $this->ticker = collect(collect(json_decode($response->getBody()->getContents(), true))->get('payload')); Log::info(json_encode($this->ticker));
if ($response && $response->getStatusCode() == 200) {
$this->ticker = collect(collect(json_decode($response->getBody()->getContents(), true))->get('payload'));
Log::info(json_encode($this->ticker));
switch ($book):
case 'btc_mxn':
return $this->ticker->whereStrict('book', 'btc_mxn');
case 'eth_mxn':
return $this->ticker->whereStrict('book', 'eth_mxn');
case 'all':
return $this->ticker;
default:
throw new ValidationHttpException(['Invalid book (9002)']);
endswitch;
}
$response部分并不重要,只有$this->ticker部分。这将获取包含对象数组的API响应对象包含我关心的book字段。json看起来像这样:
[{"high":"59999.00","last":"53021.11","created_at":"2017-05-25T23:16:44+00:00","book":"btc_mxn","volume":"1313.28966742","vwap":"55354.76622471","low":"50000.00","ask":"53998.92","bid":"53021.11"},{"high":"4699.00","last":"4102.00","created_at":"2017-05-25T23:16:44+00:00","book":"eth_mxn","volume":"7162.16835199","vwap":"4322.60134630","low":"3900.00","ask":"4102.00","bid":"4100.00"},{"high":"0.00012498","last":"0.00010700","created_at":"2017-05-25T23:16:44+00:00","book":"xrp_btc","volume":"17584.07258163","vwap":"0.00010897","low":"0.00009500","ask":"0.00011990","bid":"0.00010100"},{"high":"7.10","last":"6.05","created_at":"2017-05-25T23:16:44+00:00","book":"xrp_mxn","volume":"1015137.88406527","vwap":"6.28004670","low":"5.50","ask":"6.05","bid":"5.85"},{"high":"0.08197000","last":"0.07800000","created_at":"2017-05-25T23:16:44+00:00","book":"eth_btc","volume":"73.29999906","vwap":"0.07656212","low":"0.07250000","ask":"0.07800000","bid":"0.07600000"}]
当我切换$book时,问题就出现了。如果$book='btc_mxn'我得到一个对象数组:
[
{
"high": "59999.00",
"last": "53000.00",
"created_at": "2017-05-25T23:23:29+00:00",
"book": "btc_mxn",
"volume": "1316.43950673",
"vwap": "55323.60047189",
"low": "50000.00",
"ask": "53000.00",
"bid": "52001.00"
}
]
然而,如果$book='eth_mxn'我得到一个对象强>
{
"1": {
"high": "4699.00",
"last": "4025.97",
"created_at": "2017-05-25T23:24:18+00:00",
"book": "eth_mxn",
"volume": "7360.11920724",
"vwap": "4310.48584845",
"low": "3900.00",
"ask": "4026.00",
"bid": "4000.01"
}
}
其他任何不是“btc_mxn”的图书密钥也会发生类似情况
我通过添加对first()方法的调用来解决这个问题,但是这很奇怪。有人知道这里发生了什么吗
谢谢 图书“btc_mxn”是您收藏的第一本书,索引为0。因此,您的,其中
结果如下所示:
[
0 => { /* book data */ }
]
[
1 => { /* book data */ }
]
在json中,这是一个正确的数字索引数组,因此它表示为一个包含一个元素的数组
然而,“eth_mxn”是您收藏的第二本书,索引为1。因此,您的,其中
结果如下所示:
[
0 => { /* book data */ }
]
[
1 => { /* book data */ }
]
在json中,这不是一个正确的数字索引数组,因为索引数组必须具有从索引0开始的顺序键。因为这不是一个有效的json数组,所以它被表示为一个对象,其中数字键是该对象的属性
如果希望将其表示为数组,则需要从where()
调用中重新设置结果集合的键。您可以使用values()
方法重新键入结果:
case 'btc_mxn':
return $this->ticker->whereStrict('book', 'btc_mxn')->values();
case 'eth_mxn':
return $this->ticker->whereStrict('book', 'eth_mxn')->values();
这个问题/答案是相关的:非常有意义。非常感谢你。