0

I have this kind of json objects and im trying to search an item under sales->products->id but i can't make it work. I hope someone could help me. Thanks!

"sales": [
        {
            "ID": 123456,
            "transaction_id": "123456789",
            "key": "sdawa57sd547sad4sadx54ad",
            "subtotal": 20,
            "tax": "0",
            "fees": null,
            "total": "20",
            "gateway": "paypal",
            "email": "email@email.com",
            "date": "2018-08-01 13:13:55",
            "discounts": null,
            "products": [
                {
                    "id": 1234,
                    "quantity": 1,
                    "name": "Product 1",
                    "price": 20,
                    "price_name": ""
                }
            ]
        }

This is the code i used:

$content =     file_get_contents($url);

$results= json_decode($content, TRUE);

foreach($results->sales as $item)
{
    if($item->products->id == "1234")
    {
        echo $item->products->name;
    }
}
rjm_wd
  • 25
  • 1
  • 10

2 Answers2

1

Because you've passed the second parameter as true to json_decode, your $results variable is an array, so you need to access it like that:

foreach($results['sales'] as $item) {
    foreach ($item['products'] as $product) {
        if ($product['id'] == '1234') echo $product['name'];
    }
}

Output:

Product 1

Demo on 3v4l.org

Nick
  • 138,499
  • 22
  • 57
  • 95
0

If you want to find which sales have the product, then you should do this

$results= json_decode($content);

$productid = "1234"; //product you want to search for
foreach($result->sales as $sale)
{
  $keys = array_keys(array_column($sale->products, 'id'), $product_id);
  if(!empty($keys))
      $saleIDs[] = $sale->ID;
}
var_dump($saleIDs); //contains all the sale IDs that have the product 

Read about array_keys and array_column.

kks21199
  • 1,116
  • 2
  • 10
  • 29