вложенный массив цикла foreach json php - PullRequest
0 голосов
/ 23 октября 2018

Как мне пройти через массив, чтобы получить значения "convert_amount"?

stdClass Object
(
[rows] => Array
    (
        [0] => stdClass Object
            (
                [components] => Array
                    (
                        [0] => stdClass Object
                           (
                                [amount] => 5033298.132349431
                                [count] => 1337
                                [rate] => 3.1398800
                                [converted_amount] => 1603021.9952863243
                            )

                        [1] => stdClass Object
                            (
                                [amount] => 458673.0026585825
                                [count] => 325
                                [rate] => 0.45260800
                                [converted_amount] => 1013400.4157520011
                            )

Я пробовал foreach как этот, но он не работает.Я думаю, что между компонентами и convert_amount должно быть что-то промежуточное - может быть, другой foreach?Я не уверен.

foreach ($getexvolume as $vol) {
echo $vol['rows'][0]['components']['converted_amount'];}

Ответы [ 4 ]

0 голосов
/ 23 октября 2018

Объект у вас есть смесь массивов и объектов.Массивы могут быть адресованы как $array['value'], но объекты должны быть адресованы как $object->value.

echo $vol->rows[0]->components[0]->converted_amount;

Однако, поскольку у вас есть несколько компонентов, вам потребуется вложенный цикл:

foreach ($getexvolume as $vol)
{
  foreach($vol->rows as $row)
  {
    foreach($row->component as $component)
    {
      echo $component->converted_amount;
    }
  }
}

(псевдокод - не тестируется).

В идеале переменная должна быть сначала нормализована как многомерный массив или вложенный объект, чтобы вам не приходилось беспокоиться о синтаксисе.

0 голосов
/ 23 октября 2018

У вас есть объект вместо массива.Вы должны работать с данными как с объектом ...

foreach ($getexvolume->rows as $row) {
    foreach ($row->components as $component) {
       echo $component->converted_amount;
    }
}
0 голосов
/ 23 октября 2018

Попробуйте это:

foreach ($getexvolume->rows[0]->components as $vol) {
       echo $vol->converted_amount;
}
0 голосов
/ 23 октября 2018
   echo $vol->rows[0]->components[0]->converted_amount;

Вы смешиваете массив и объект.Ваш вывод является объектом, поэтому вы должны обращаться к нему как к другому, в противном случае, если вы хотите обращаться с ним как с массивом, вы должны преобразовать его в массив.На данный момент вы можете использовать приведенный выше код.

Лучшее решение, которое, как мне кажется, подходит для вашей проблемы, состоит в том, что вы циклически обходите свой вложенный массив, например:

foreach($vol->rows[0]->components as $data){
echo $data->converted_amount;
}
...