2014-02-22 105 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的一個旁註,你不能留下這樣的尾隨逗號。 PHP的json_decode函數以及幾個瀏覽器將無法解析它。 – rjdown

回答

0

您可以通過items在你的JSON對象的result迭代,並檢查是否與所需的代碼平等,每個項目的代碼。以下是你將如何實現它的功能。

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); 

foreach() Documenation。

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

首先,你應該像解碼你的JSON數據:

$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

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

然後,您可以在此數組像獲得價值您可以將JSON轉換爲PHP o通過與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;