我有一个API,它返回这个:
{"响应":{"cid":5122405,"title":"Austin","area":"Estrie","region":"Quebec"},{"acid":5467453,"title":"奥斯汀","region":"Manitoba"}]}
我想打印所有区域,但作为上面的例子,魁北克的奥斯汀有区域值(Estrie),但马尼托巴的奥斯汀没有。
我的代码是:
for($i = 0; $i < count($json_array['response']); ++$i){
echo $json_array['response'][$i]['area'];
但问题是我得到了这个错误注意:未定义的索引:…中的区域其中不存在区域值(如马尼托巴省的奥斯汀)。
如何检查区域是否存在?
有两种基本方法可以处理这个问题。
最简单的方法是检查变量的存在
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缺少这些值。
编辑:拼写
如果快速
for($i = 0; $i < count($json_array['response']); ++$i){
if($json_array['response'][$i]['area']){
echo $json_array['response'][$i]['area'];
};
您可以使用json解码作为对象,并获得项目列表:
$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
}