处理空值以防止在循环中出错

时间:2015-04-18 08:21:40

标签: php

我使用以下代码从循环中返回数据,虽然我收到的数据似乎也可能是空数据也会产生错误。

这是代码

$extensions = count($cert['tbsCertificate']['extensions']);
for ($j = 0; $j < $extensions; $j++) {
    $count = count($cert['tbsCertificate']['extensions'][$j]['extnValue']);
    for ($i = 0; $i < $count; $i++) {
        if (array_key_exists('dNSName', $cert['tbsCertificate']['extensions'][$j]['extnValue'][$i])) {
            $value = $cert['tbsCertificate']['extensions'][$j]['extnValue'][$i]['dNSName'];
            $item = $i;
            echo 'DNSName',$item,'   : ', $value,"\n";
        }
    }
}

这是输出结果

enter image description here

有人可以帮助我更新代码以检查空值(我认为在第一个for循环中)并且理想地忽略那些因此警告不会出现吗?如果需要,我很乐意提供更多背景信息。

2 个答案:

答案 0 :(得分:1)

更改if条件,以便检查它是否已设置以及是否为数组:

if(isset($cert['tbsCertificate']['extensions'][$j]['extnValue'][$i])
    &&
is_array($cert['tbsCertificate']['extensions'][$j]['extnValue'][$i])
    && 
array_key_exists('dNSName', $cert['tbsCertificate']['extensions'][$j]['extnValue'][$i]))

如果在第一个条件中检测到它未设置或不是数组,则不会进入array_key_exists函数。

答案 1 :(得分:0)

错误可能是,因为传入的数据没有像0,1,2,3 ......这样的索引 - 可能是从1开始。 我认为最简单的解决方案是你用FOREACH替换FOR结构。