Как использовать данные JSON и подготовить массив PHP - PullRequest
1 голос
/ 23 апреля 2020

Здравствуйте, я работаю с API, который дает мне JSON данные, и я хочу получить массив из этого в php, как это.

Приведенный ниже код дает мне список стран в JSON

 <?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.dingconnect.com/api/V1/GetCountries",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "api_key: 5sIkXhACG4n5kaktzVECSl",
    "Cookie: visid_incap_1373684=W9x+2eX9SnqTQX976o3oKHP6p14AAAAAQUIPAAAAAACMqfJ0lIy4A94PIJ9/k566; visid_incap_1694192=CGL0RcqDS4y8rtfUDyl8RIn7p14AAAAAQUIPAAAAAAAgAZUccrSXJcreVE5ZcnLv; incap_ses_314_1694192=sszNShN26mgsFiNoe41bBOCRrV4AAAAAIX3OEAYdaCajfehID6IgsQ=="
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

образец JSON Полученные данные

{
    "ResultCode": 1,
    "ErrorCodes": [],
    "Items": [
        {
            "CountryIso": "AD",
            "CountryName": "Andorra",
            "InternationalDialingInformation": [],
            "RegionCodes": [
                "AD"
            ]
        },
        {
            "CountryIso": "AE",
            "CountryName": "United Arab Emirates",
            "InternationalDialingInformation": [
                {
                    "Prefix": "971",
                    "MinimumLength": 12,
                    "MaximumLength": 12
                }
            ],
            "RegionCodes": [
                "AE"
            ]
        },
        {
            "CountryIso": "AF",
            "CountryName": "Afghanistan",
            "InternationalDialingInformation": [
                {
                    "Prefix": "93",
                    "MinimumLength": 11,
                    "MaximumLength": 11
                }
            ],
            "RegionCodes": [
                "AF"
            ]
        },
        {
            "CountryIso": "AG",
            "CountryName": "Antigua",
            "InternationalDialingInformation": [
                {
                    "Prefix": "1268",
                    "MinimumLength": 11,
                    "MaximumLength": 11
                }
            ],
            "RegionCodes": [
                "AG"
            ]
        },
        {
            "CountryIso": "AI",
            "CountryName": "Anguilla",
            "InternationalDialingInformation": [
                {
                    "Prefix": "1264",
                    "MinimumLength": 11,
                    "MaximumLength": 11
                }
            ],
            "RegionCodes": [
                "AI"
            ]
        },
        {
            "CountryIso": "AL",
            "CountryName": "Albania",
            "InternationalDialingInformation": [
                {
                    "Prefix": "355",
                    "MinimumLength": 12,
                    "MaximumLength": 12
                }
            ],
            "RegionCodes": [
                "AL"
            ]
        },
        {
            "CountryIso": "AM",
            "CountryName": "Armenia",
            "InternationalDialingInformation": [
                {
                    "Prefix": "374",
                    "MinimumLength": 11,
                    "MaximumLength": 11
                }
            ],
            "RegionCodes": [
                "AM"
            ]
        },
        {
            "CountryIso": "AN",
            "CountryName": "Netherlands Antilles",
            "InternationalDialingInformation": [
                {
                    "Prefix": "599",
                    "MinimumLength": 10,
                    "MaximumLength": 10
                }
            ],
            "RegionCodes": [
                "AN"
            ]
        },
        {
            "CountryIso": "AO",
            "CountryName": "Angola",
            "InternationalDialingInformation": [
                {
                    "Prefix": "244",
                    "MinimumLength": 12,
                    "MaximumLength": 12
                }
            ],
            "RegionCodes": [
                "AO"
            ]
        },
        {
            "CountryIso": "AR",
            "CountryName": "Argentina",
            "InternationalDialingInformation": [
                {
                    "Prefix": "54",
                    "MinimumLength": 12,
                    "MaximumLength": 12
                }
            ],
            "RegionCodes": [
                "AR"
            ]
        },
        {
            "CountryIso": "AS",
            "CountryName": "American Samoa",
            "InternationalDialingInformation": [
                {
                    "Prefix": "1684",
                    "MinimumLength": 11,
                    "MaximumLength": 11
                }
            ],
            "RegionCodes": [
                "AS"
            ]
        },
        {
            "CountryIso": "AT",

я хочу иметь массив названия страны и идентификатора, чтобы я мог сделайте выпадающий список полученных стран.

Я действительно понятия не имею, как это сделать. любая помощь действительно ценится. Thankx

Ответы [ 3 ]

2 голосов
/ 02 мая 2020

Если $response - это JSON, вы можете сделать json_decode($response);, который преобразует JSON в PHP объект или массив, и вы можете оттуда извлекать имя и идентификатор страны.

1 голос
/ 03 мая 2020

Вам необходимо json_decode ответ $, прочитать каждый элемент в al oop и передать его во вновь созданный массив.

Примечание. Если вам не нужны коды ISO Вы также можете использовать array_map вместо foreach.

$response = curl_exec($curl);  // original line

$countryData = json_decode($response)->Items;

$countries = [];
if ($countryData !== false) {
    foreach ($countryData as $countryItem) {
        $countries[$countryItem->CountryIso] = $countryItem->CountryName;
    }
}

// var_dump($countries);

Ваш $countries будет массивом:

[
    "AD" => "Andorra",
    "AE" => "United Arab Emirates",
    "AF" => "Afghanistan",
    // etc.
]
0 голосов
/ 01 мая 2020

Я бы предложил вам использовать пакет jQuery или CDN. Это замечательно, когда вы делаете запросы к API, и поддерживает отличную поддержку Ajax. Лично я нахожу, что с Ajax и jQuery у вас будет намного приятнее, так как это проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...