Как получить массив из .json в PHP - PullRequest
0 голосов
/ 26 октября 2019

У меня есть документ json с индийскими штатами [Cities [Area]], похожий на следующий:

{
    "Andaman and Nicobar Islands": [{
            "Port Blair": [
                "Aberdeen Bazaar",
                "Bidhabad Village",
                "Chidiyatapu",
                "Corbyns Cove",
                "Dollygunj",
                "Ferrurgunj",
                "Goalghar",
                "Goodwill Estate",
                "Junglighat",
                "Marine Hill",
                "Phoenix Bay",
                "South Point"
            ]
        },
        {
            "Havelock Island": [
                "Govindnagar Beach",
                "Radhanagar Beach",
                "Vijaynagar Beach"
            ]
        },
        {
            "Neil Island": [
                "Ramnagar",
                "Bharat Pur",
                "Sitapur Beach",
                "Laxmanpur",
                "Neil Kendra"
            ]
        }....
}

Я хочу получить этот массив в этом формате:

$stateData['Andaman and Nicobar Islands'] => [
    "Port Blair" => [
        "Aberdeen Bazaar" => "Aberdeen Bazaar",
        "Bidhabad Village" => "Bidhabad Village"
         .
         .
         .
    ]
]

и так далее ... У меня есть эти данные Json в файле json и я присваиваю значение переменной $ stateData, используя $stateData = (array)json_decode(fread($file, filesize(public_path('india_state_city1.json'))));

Ответы [ 3 ]

1 голос
/ 26 октября 2019

Я предполагаю, что ваш json сохраняется в переменной с именем $ states .

  foreach (json_decode($states) as $key => $state) {
            foreach ($state as $stateData) {
                foreach ($stateData as $key2 => $city) {
                    foreach ($city as $key3 => $cit) {

                        $res[$key][$key2][$cit] = $cit;
                    }
                }

            }
        }

Выход:

enter image description here

Проверьте демонстрацию: https://paiza.io/projects/NlK9g5jluy8Lz9kmhMW69Q

0 голосов
/ 26 октября 2019

длинное, но простое решение, я думаю,

  1. , на мой взгляд, функция json_decode поможет со вторым параметром, переданным как true, потому что он преобразует каждый внутренний object в array* 1008. *
  2. путем преобразования в массив мы можем легко использовать название штата, города и области, а если вы хотите упорядочить, даже вы можете сделать это с помощью ключа № массива

    <?php
            $data = '{
                  "Andaman and Nicobar Islands": [
                          {
        "Port Blair": [
            "Aberdeen Bazaar",
            "Bidhabad Village",
            "Chidiyatapu",
            "Corbyns Cove",
            "Dollygunj",
            "Ferrurgunj",
            "Goalghar",
            "Goodwill Estate",
            "Junglighat",
            "Marine Hill",
            "Phoenix Bay",
            "South Point"
        ]
    },
    {
        "Havelock Island": [
            "Govindnagar Beach",
            "Radhanagar Beach",
            "Vijaynagar Beach"
        ]
    },
    {
        "Neil Island": [
            "Ramnagar",
            "Bharat Pur",
            "Sitapur Beach",
            "Laxmanpur",
            "Neil Kendra"
              ]
          }
                ]
      }';
          $indian_states = json_decode($data,TRUE);
    
           foreach ($indian_states as $stateName=>$statesCities)
                    {
                    echo $stateName;
    
                    foreach ($statesCities as $citiNo=>$cityAreas)
                           {
                                echo '<br />&nbsp;&nbsp;&nbsp;&nbsp;|---'; //comment this line
                                foreach ($cityAreas  as $citiName=>$areas)
                                       {
                                           echo $citiName;
    
                                           foreach ($areas as $areaName){
                                                      echo "<br     />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|---"; //comment this line                                                 echo $areaName;echo '<br />';
                             }
                         }
                  }
             }
    
          ?>
    

выход

enter image description here

0 голосов
/ 26 октября 2019

Я понял, что вы хотите сделать массив областей ассоциативным, а значение id одинаковым. если я прав, вы можете сделать это:

foreach ($stateData['Andaman and Nicobar Islands'] as &$array_1) {
    foreach ($array_1 as &$area_array){
        $formatted_array = [];
        foreach ($area_array as $area){
            $formatted_array[$area] = $area;
        }
        $area_array = $formatted_array;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...