2015-08-05 2 views
0

Мне трудно получить значения JSON (полученные с использованием URL) в переменных электронной почты. Следующий код работает (я удалил идентифицируемые и пригодные для использования данные).извлечения переменных JSON с php для использования по электронной почте

$addr = "https://98905:[email protected]/geoip/v2.1/insights/".$ipaddr; 
// fetching geoip data in JSON format 
$json = (file_get_contents($addr)); 
//parsing JSON format to object format 
$obj = json_decode($json); 
// assigning values to separate variables for email message 
$var_country = $obj->country->names->en; 
$var_city = $obj->city->names->en; 
$var_city_confidence = $obj->city->confidence->en; 
$var_city_geoname_id = $obj->city->geoname_id->en; 
$var_location = $obj->location->accuracy_radius->en;enter code here 

Однако один набор данных является массив, который выглядит следующим образом (идентифицируемых и используемых данных протертые):

"subdivisions":[{"geoname_id":5166838,"iso_code":"NY","confidence":24,"names":{"ja":"ニューヨーク州","fr":"New York","ru":"Нью-Йорк","en":"New York","zh-CN":"纽约州","de":"New York","pt-BR":"Nova Iorque","es":"Nueva York"}}] 

Моя трудность заключается в извлечении «имена» «ан» часть из подразделений мульти-массив. Все предыдущие массивы - это отдельные единицы, это мульти, и я испытываю трудности с сверлением до «имен» «en» из подразделений и получением этого значения в массив, используя тот же процесс, что и выше.

ответ

0

Попробуйте с

$p=json_decode('{"subdivisions":[{"geoname_id":5166838,"iso_code":"NY","confidence":24,"names":{"ja":"ニューヨーク州","fr":"New York","ru":"Нью-Йорк","en":"New York","zh-CN":"纽约州","de":"New York","pt-BR":"Nova Iorque","es":"Nueva York"}}]}'); 

$enNames = array(); 

foreach($p->subdivisions as $subdivision){ 
    $enNames[]=$subdivision->names->en; 
} 

print_r($enNames); 
0

Если вы просто ищете, чтобы получить ключ en, вы можете сделать что-то вроде этого:

$objects->subdivisions[0]->names->en;

Если Вы желаете получить каждый набор данных, прокладывать их так:

foreach($objects->subdivisions[0]->names as $key => $value) { 
    echo $key . ' --- ' . $value . '<br />'; 
} 

a d в соответствии с вашими потребностями.

+0

Хорошо, отлично! решение выше работает отлично. Я говорю об этом: $ objects-> subdivisions [0] -> names-> en; Для моего собственного назидания и образования кто-нибудь может объяснить скобки нулем и целью этого? Благодарю. – jeffschips

+0

Представляет элемент с индексом 0 в массиве subdivisions, другими словами, первое подразделение. В моем ответе я предлагаю цикл через массив подразделений в случае, если у вас более одного подразделения. – davcs86

Смежные вопросы