2014-02-22 5 views
1

Я использую PHP и json_decode для использования удаленного API, и у меня есть то, что кажется проблемой для новичков, для которой я даже не знал, что искать, чтобы найти мой ответ.PHP: Как получить значение из файла JSON?

Так что на мой сценарий у меня есть $ код = 392 и JSon файл, который упрощенная версия является:

{ 
    "result": { 
     "items": [ 
      { 
       "name": "New York", 
       "code": 7294, 
      }, 
      { 
       "name": "Miami", 
       "code": 392, 
      }, 
      { 
       "name": "Los Angeles", 
       "code": 9182, 
      } 
     ] 
    } 
} 

Так, попросту говоря, имея код 392 Я хочу знать, какое имя соответствует этому коду , Как ? (Фактический результат JSON тысячи «пунктов», если это имеет значение)

+1

Вы должны написать 'foreach' цикл, который ищет код. Нет встроенного метода, чтобы найти его в таком массиве. – Barmar

+1

Просто пропустите на вашем примере JSON, вам не разрешено оставлять запятые. Функция json_decode PHP, наряду с несколькими браузерами, не сможет ее проанализировать. – rjdown

ответ

0

Вы можете перебирать items в result вашего объекта JSON, и проверить на равенство с требуемым кодом, и код каждого элемента. Вот как вы могли бы реализовать его в функции.

function getNameFromCode($json, $code) { 
    foreach ($json['result']['items'] as $item) 
     if ($item['code'] == $code) 
      return $item['name']; 

    // return false if the code wasn't found. 
    return false; 
} 

// assume this is the JSON string of your example. 
$json_string = "..."; 

// pass true as the second argument to get an associative array. 
$json = json_decode($json_string, true); 

// should return "Los Angeles". 
$name = getNameFromCode($json, 9182); 

Documenation на foreach().

0
foreach(json_decode($my_json_string) as $key => $item) 
     if ($item['code'] === $code) { $name = $item[name]; break; } 
1

Сначала вы должны декодировать данные JSON, как:

// will decode json data as assoc array 
$data = json_decode($json_data, true); 

Затем, вы можете получить значение в этом массиве, как:

$item01 = $data['result']['items'][0]; 
$name = $item01['name']; // New York 
$code = $item01['code']; // 7294 

Или

// will decode json data as object 
$data = json_decode($json_data); 

$item01 = $data->result->items[0]; 
$name = $item01->name; // New York 
$code = $item01->code; // 7294 
0

Вы можете конвертировать JSON в PHP o bject и loop через элементы с циклом foreach.

function getNameByCode($phpobj, $code){ 
    if(isset($phpobj->result)){ 
     if(isset($phpobj->result->items) 
      && is_array($phpobj->result->items)){ 
      foreach($phpobj->result->items as $item){ 
       if($item->code == $code){ 
        return $item->name; 
       } 
      } 
     } 
    } 
    return false; 
}//end function 

Вы можете проверить с этим ... Примечание: конечные запятые удаляются, как предполагают, по rjdown в комментарии

$json = '{ 
"result":  { 
    "items": [ 
       { 
        "name": "New York", 
        "code": 7294 
       }, 
       { 
        "name": "Miami", 
        "code": 392 
       }, 
       { 
        "name": "Los Angeles", 
        "code": 9182 
       } 
      ] 
      } 
     }'; 
$phpobj = json_decode($json); 

$name = getNameByCode($phpobj, "7294"); 
echo $name; 
Смежные вопросы