1

I made a search in the forum, and really I found a lot of examples, however no one works for me. Maybe (for sure) im doing something wrong. For that reason and if possible, I need assistance from you guys.

What I want? I want get the specific array from the json file.

Array:

array (
  'Data' => 
  array (
    0 => 
    array (
      'Id' => 439201,
      array (
      ),
      'Members' => 
      array (
        0 => 
        array (
          'PortfolioId' => 439201,
          'Id' => 100,
          array (
            'Id' => 1182,
            'Symbol' => 'BTC',
          ),
          'Amount' => 0.1,
          'BuyPrice' => 4000,
        ),
        1 => 
        array (
          'PortfolioId' => 439201,
          'Id' => 200,
          array (
            'Id' => 1182,
            'Symbol' => 'BTC',
          ),
          'Amount' => 0.2,
          'BuyPrice' => 5000,
        )
      )
    )
  )
)

I want print this way:

+----------+---------+----------+
| id       |  amount | BuyPrice |
+-------------------------------+
|  100     |  0.1    | 4000     |
+-------------------------------+
|  200     |  0.2    | 5000     |
+----------+---------+----------+

My php code:

$url = file_get_contents(dirname(__DIR__  ) . '/json/history.json');
$array = json_decode($url, TRUE);

foreach ($array as $items) {
  foreach ($items as $key => $value) {
      echo $value['Id'] . '|' . $value['amount'] . '|' . $value['BuyPrice'] . '<br>'; 
  }
}
ficolixado
  • 25
  • 4

2 Answers2

1

Try this

$arrayName = array (
  'Data' =>
  array (
    0 =>
    array (
      'Id' => 439201,
      array (
      ),
      'Members' =>
      array (
        0 =>
        array (
          'PortfolioId' => 439201,
          'Id' => 100,
          array (
            'Id' => 1182,
            'Symbol' => 'BTC',
          ),
          'Amount' => 0.1,
          'BuyPrice' => 4000,
        ),
        1 =>
        array (
          'PortfolioId' => 439201,
          'Id' => 200,
          array (
            'Id' => 1182,
            'Symbol' => 'BTC',
          ),
          'Amount' => 0.2,
          'BuyPrice' => 5000,
        ),
      ),
    ),
  ),
);
foreach ($arrayName['Data'][0]['Members'] as $key => $value) {
  echo $value['Id'] . '|' . $value['Amount'] . '|' . $value['BuyPrice'] . '<br>';
}

Saleh7
  • 54
  • 3
  • I don't really see why this got downvoted as it work's fine. https://3v4l.org/qbVr3 Allow me to equalise... – Nick Apr 13 '19 at 04:36
1

This should cut it:

$array = [
    'Data' =>
        [
            [
                'Id'      => 439201,
                [],
                'Members' => [
                    [
                        'PortfolioId' => 439201,
                        'Id'          => 100,
                        [
                            'Id'     => 1182,
                            'Symbol' => 'BTC',
                        ],
                        'Amount'      => 0.1,
                        'BuyPrice'    => 4000,
                    ],
                    [
                        'PortfolioId' => 439201,
                        'Id'          => 200,
                        [
                            'Id'     => 1182,
                            'Symbol' => 'BTC',
                        ],
                        'Amount'      => 0.2,
                        'BuyPrice'    => 5000,
                    ]
                ]
            ]
        ]
];

foreach($array['Data'] as $value) {
    foreach($value['Members'] as $member) {
        echo "{$member['Id']}|{$member['Amount']}|{$member['BuyPrice']}<br>";
    }
}

Update: If you would like to build an array based off of your output, you may do somehting like this:

$map = array_map(function($data) {
    return array_map(function($member) {
        ['Id' => $Id, 'Amount' => $Amount, 'BuyPrice' => $BuyPrice] = $member;
        return compact('Id', 'Amount', 'BuyPrice');
    }, $data['Members']);
}, $array['Data']);
print_r($map);
Miroslav Glamuzina
  • 4,472
  • 2
  • 19
  • 33