Как получить вложенный массив в коллекцию в Laravel - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть ответ от 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

Вместо этого я получаю следующее в моих результатах:

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 голосов
/ 30 апреля 2018

A Collection - это просто оболочка вокруг массива. Ваши collect вызовы возвращают правильные представления коллекции, но вы смешиваете синтаксис объекта и массива. Делая что-то вроде $collection->WAN, вы не пытаетесь получить значение «WAN» в массиве с именем «collection», но пытаетесь получить значение атрибута в объекте с именем «collection». Collection должен основываться на массиве, поэтому $collection->WAN не должен работать.

Ваша попытка использования функций JSON работает, потому что когда вы декодируете JSON с использованием json_decode(), он по умолчанию декодирует его в объект, а вы декодируете его в ассоциативный массив, используя второй необязательный параметр, такой как json_decode($json, true).

Если вы просто хотите работать с «методами сбора», которые, как я полагаю, похожи на $collection->sum('available') или аналогичные, тогда подойдет любой из двух ваших подходов, хотя первый, вероятно, будет быстрее. Вам просто нужно убедиться, что вы не смешиваете нотацию массива ($collection["WAN"]) с нотацией объекта ($collection->WAN).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...