我使用以下代码从循环中返回数据,虽然我收到的数据似乎也可能是空数据也会产生错误。
这是代码
$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";
}
}
}
这是输出结果
有人可以帮助我更新代码以检查空值(我认为在第一个for循环中)并且理想地忽略那些因此警告不会出现吗?如果需要,我很乐意提供更多背景信息。
答案 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结构。