我有来自api的回复,返回的内容如下:
array:162 [▼
"WAN" => array:4 [▼
"available" => "1153.65000000"
"onOrder" => "0.00000000"
"btcValue" => "1.05385928"
"btcTotal" => "1.05385928"
]
"ONT" => array:4 [▼
"available" => "961.95000000"
"onOrder" => "0.00000000"
"btcValue" => "0.83237534"
"btcTotal" => "0.83237534"
]
"NCASH" => array:4 [▼
"available" => "114194.00000000"
"onOrder" => "0.00000000"
"btcValue" => "0.59495074"
"btcTotal" => "0.59495074"
]
....
这都是好事和花花公子,但我更喜欢使用收集方法。
我尝试使用collect()方法转换为集合。
$collection = collect($returned, true);
但是我仍然无法像这样遍历数据:
$collection->WAN->available
相反,我在$ results中获得以下内容:
Collection {#408 ▼
#items: array:162 [▼
"WAN" => array:4 [▼
"available" => "1153.65000000"
"onOrder" => "0.00000000"
"btcValue" => "1.05085979"
"btcTotal" => "1.05085979"
]
"ONT" => array:4 [▼
"available" => "961.95000000"
"onOrder" => "0.00000000"
"btcValue" => "0.83170197"
"btcTotal" => "0.83170197"
]
"NCASH" => array:4 [▼
"available" => "114194.00000000"
"onOrder" => "0.00000000"
"btcValue" => "0.59951850"
"btcTotal" => "0.59951850"
]
....
所以经过充分的讨论之后,我发现了这个:
$results = json_encode($returned);
$results = json_decode($results);
$collection = collect($results, true);
这是朝着正确方向迈出的一步,但我仍然无法以完整的集合风格遍历数据。
我现在有以下情况归还给我:
Collection {#572 ▼
#items: array:162 [▼
"WAN" => {#409 ▼
+"available": "1153.65000000"
+"onOrder": "0.00000000"
+"btcValue": "1.05270563"
+"btcTotal": "1.05270563"
}
"ONT" => {#411 ▼
+"available": "961.95000000"
+"onOrder": "0.00000000"
+"btcValue": "0.81842706"
+"btcTotal": "0.81842706"
}
"NCASH" => {#412 ▼
+"available": "114194.00000000"
+"onOrder": "0.00000000"
+"btcValue": "0.60294432"
+"btcTotal": "0.60294432"
}
我可以这样穿越:
$collection['WAN']->available
我怎样才能做到:
$collection->WAN->available
我现在已经没有想法了,我似乎无法找到任何可能解决这个问题的东西。
有什么想法吗?
提前致谢。
答案 0 :(得分:0)
Collection
只是数组的包装器。您的collect
调用正在返回正确的集合表示,但您正在混合对象和数组语法。像$collection->WAN
这样的事情并不是试图在名为“collection”的数组中获取“WAN”的值,而是试图在名为“collection”的对象中获取属性的值。 Collection
应该基于数组,因此$collection->WAN
不应该有效。
使用JSON函数的尝试是有效的,因为当您使用json_decode()
解码JSON时,它默认将其解码为对象,您可以使用第二个可选参数(如{{1})将其解码为关联数组}。
如果您只是想使用“收集方法”,我假设它类似于json_decode($json, true)
或类似,那么您的两种方法中的任何一种都可以工作,尽管第一种方法可能会更快。您只需确保不将数组表示法($collection->sum('available')
)与对象表示法($collection["WAN"]
)混合使用。