如何检查JSON索引(键)是否存在?

时间:2015-12-15 21:23:02

标签: php json indexing key undefined

我有这个API返回:

  

{"响应&#34 ;:   [{" CID":5122405,"标题":"奥斯汀""区域":"艾第地区",& #34;区域":"魁北克"},{" CID":5467453,"标题":"奥斯汀"&# 34;区域":"马尼托巴"}]}

我想打印所有区域,但作为上面的例子,魁北克省的Austin有面积价值(Estrie),但曼尼托巴省的Austin没有。

我的代码是:

for($i = 0; $i < count($json_array['response']); ++$i){ 
    echo $json_array['response'][$i]['area'];

但问题是我收到此错误提示:未定义的索引:区域... 其中区域值不存在(如曼尼托巴省的奥斯汀)。

我如何检查是否存在区域

3 个答案:

答案 0 :(得分:2)

有两种基本方法可以解决这个问题。

最简单的方法是检查变量

的存在
echo array_key_exists('area', $json_array['response'][$i]) ? $json_array['response'][$i]['area'] : null;

另一种方法是标准化API的响应,以便area密钥始终存在

function standardizeApi($values) 
{
    foreach ($values['response'] as $i => $details) {
        if (!array_key_exists('area', $details)) {
            $values['response'][$i]['area'] = null; // default value
        }
    }
    return $values;
}

$json_array = standardizeApi($json_array);
// loop though as normal

如果要检查多个密钥,第二种方法会更好。您可以确保数组包含值,即使api缺少它们。

编辑:拼写

答案 1 :(得分:0)

快速

for($i = 0; $i < count($json_array['response']); ++$i){ 
     if($json_array['response'][$i]['area']){
echo $json_array['response'][$i]['area'];

};

答案 2 :(得分:0)

您可以将json decode用作对象并获取项目列表:

$stringJson = '{"response":[{"cid":5122405,"title":"Austin","area":"Estrie","region":"Quebec"},{"cid":5467453,"title":"Austin","region":"Manitoba"}]}';
$jsonObj = json_decode($stringJson);
foreach ($jsonObj->response as $item) {
   echo $item->cid; // 5122405 5467453
}