如何将嵌套数组添加到Laravel中的集合

时间:2018-04-30 16:23:18

标签: php arrays laravel collections

我有来自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

我现在已经没有想法了,我似乎无法找到任何可能解决这个问题的东西。

有什么想法吗?

提前致谢。

1 个答案:

答案 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"])混合使用。