'php foreach loop don't work when I want to traverse json file

My foreach loop dont work. It brings me only 1st item info when i use $arr in my foreach loop but when i change that to $value it gives me nothing :(

<?php
      $url = file_get_contents("libs/json/countryBorders.geo.json");
      $arr = json_decode($url,true);
    
    
      foreach($arr as $value)  {
             echo $value['features'][0]['properties']['name'];
             echo $value['features'][0]['properties']['iso_a2'];
       };
        
?>

Here is one of my elements in json file. I want to print all names and iso_a2 codes

{
   "type":"FeatureCollection",
   "features":[
      {
         "type":"Feature",
         "properties":{
            "name":"Bahamas",
            "iso_a2":"BS",
            "iso_a3":"BHS",
            "iso_n3":"044"
         },
         "geometry":{
            "type":"MultiPolygon",
            "coordinates":[
               [
                  [
                     [
                        -77.53466,
                        23.75975
                     ],
                     [
                        -77.78,
                        23.71
                     ],
                     [
                        -78.03405,
                        24.28615
                     ],
                     [
                        -78.40848,
                        24.57564
                     ],
                     [
                        -78.19087,
                        25.2103
                     ],
                     [
                        -77.89,
                        25.17
                     ],
                     [
                        -77.54,
                        24.34
                     ],
                     [
                        -77.53466,
                        23.75975
                     ]
                  ]
               ],
               [
                  [
                     [
                        -77.82,
                        26.58
                     ],
                     [
                        -78.91,
                        26.42
                     ],
                     [
                        -78.98,
                        26.79
                     ],
                     [
                        -78.51,
                        26.87
                     ],
                     [
                        -77.85,
                        26.84
                     ],
                     [
                        -77.82,
                        26.58
                     ]
                  ]
               ],
               [
                  [
                     [
                        -77,
                        26.59
                     ],
                     [
                        -77.17255,
                        25.87918
                     ],
                     [
                        -77.35641,
                        26.00735
                     ],
                     [
                        -77.34,
                        26.53
                     ],
                     [
                        -77.78802,
                        26.92516
                     ],
                     [
                        -77.79,
                        27.04
                     ],
                     [
                        -77,
                        26.59
                     ]
                  ]
               ]
            ]
         }
      }
php


Solution 1:[1]

I'm assuming you're parsing a collection of geospatial data and it is one entry you've copied in your question, in which case you'll need a nested loop. Something like the following should do it.

$url = file_get_contents("libs/json/countryBorders.geo.json");
$arr = json_decode($url, true);
    
foreach($arr as $value)  {
    foreach($value['features'] as $feature) {
        echo $feature['properties']['name'];
        echo $feature['properties']['iso_a2'];
    }
}

Solution 2:[2]

you can start to iterate your array from features. like that.

$a = $arr['features'];
foreach($a as $value)  {
    echo $value['properties']['name'];
   echo $value['properties']['iso_a2'];
};

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Maik Lowrey