У меня есть строка, которая выглядит так:

{"ip":"XX.XX.XX","country_code":"IE","country_name":"Ireland","region_code":"L","region_name":"Leinster","city":"Dublin","zip_code":"","time_zone":"Europe/Dublin","latitude":53.333,"longitude":-6.249,"metro_code":0}

Мне нужно только значение для country_name из этой строки.

Поэтому я попробовал это:

$country = '{"ip":"XX.XX.XX","country_code":"IE","country_name":"Ireland","region_code":"L","region_name":"Leinster","city":"Dublin","zip_code":"","time_zone":"Europe/Dublin","latitude":53.333,"longitude":-6.249,"metro_code":0}';

if (preg_match('#^country_name: ([^\s]+)#m', $country, $match)) {
    $result = $match[1];
}

echo $result;

Но в $result ничего не отображается

Может ли кто-нибудь посоветовать по этому поводу?

php
2
H.HISTORY 27 Окт 2015 в 18:22

4 ответа

Лучший ответ
$country = json_decode('{"ip":"XX.XX.XX","country_code":"IE","country_name":"Ireland","region_code":"L","region_name":"Leinster","city":"Dublin","zip_code":"","time_zone":"Europe/Dublin","latitude":53.333,"longitude":-6.249,"metro_code":0}');

echo $country->country_name;

У вас есть строка JSON.

JSON расшифровывается как JavaScript Object Notation. PHP может декодировать его в массив или объект через json_decode ($ string, FALSE);

Второй параметр по умолчанию - FALSE, что означает, что он преобразует строку в объект, к которому вы затем можете получить доступ, как я показал вам выше.

5
André Catita 27 Окт 2015 в 15:29

Если по какой-то причине вы не хотите использовать JSON, вы можете попробовать следующее. Обратите внимание, что использование JSON является рекомендуемым способом выполнения этой задачи.

$country = '{"ip":"XX.XX.XX","country_code":"IE","country_name":"Ireland","region_code":"L","region_name":"Leinster","city":"Dublin","zip_code":"","time_zone":"Europe/Dublin","latitude":53.333,"longitude":-6.249,"metro_code":0}';

$temp = explode('"country_name":', $country); //Explode initial string
$temp_country = explode(',', $temp[1]); //Get only country name
$country_name = str_replace('"', ' ', $temp_country[0]); //Remove double quotes
echo $country_name;

Результат:

Ireland
1
Kostas Mitsarakis 27 Окт 2015 в 23:57

Попробуй это:

<?php
$country=json_decode('{"ip":"XX.XX.XX","country_code":"IE","country_name":"Ireland","region_code":"L","region_name":"Leinster","city":"Dublin","zip_code":"","time_zone":"Europe/Dublin","latitude":53.333,"longitude":-6.249,"metro_code":0}')
$result=$country->country_name;
echo $result;
?>
0
Manikiran 27 Окт 2015 в 15:39

Это похоже на строку json. Узнайте больше о JSON.

Используйте это так:

$foo = '{"ip":"XX.XX.XX","country_code":"IE","country_name":"Ireland","region_code":"L","region_name":"Leinster","city":"Dublin","zip_code":"","time_zone":"Europe/Dublin","latitude":53.333,"longitude":-6.249,"metro_code":0}';
$bar = json_decode($foo, true);
echo $bar['country_name'];

Это можно использовать с любым key из этой строки (например, ip, city)

Подробнее о json_decode.

0
FirstOne 27 Окт 2015 в 16:01