【问题标题】:handle null values to prevent errors while in loop在循环中处理空值以防止错误
【发布时间】:2015-04-18 08:21:39
【问题描述】:

我正在使用以下代码从循环中返回数据,虽然我正在接收数据,但似乎也可能存在空数据,这也会产生错误。

这里是代码

$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 循环中),最好忽略这些,这样警告就不会出现?如果需要,我很乐意提供更多背景信息。

【问题讨论】:

    标签: php


    【解决方案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函数。

    【讨论】:

    • 我完全按照你的方式替换了它,我得到一个奇怪的错误`解析错误:语法错误,C:\xampp\htdocs\labs\test3\parse_cert_dn.php 中的文件意外结束在线154`
    • 显然你用了一个额外的{花括号,检查它们是否配对。
    • 是的,我做到了..哇几乎所有错误都消失了!我现在才看到这个Notice: Undefined offset: 0 in C:\xampp\htdocs\labs\test3\parse_cert_dn.php on line 139
    • 好的,我添加了一个条件,如果isset,现在没有更多错误了。
    • n-dru,哈哈,你真的很擅长这个!你是对的,所有错误都消失了,我仍然得到我需要的数据。非常感谢!
    【解决方案2】:

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

    【讨论】:

    • 它始终以 0 开头。您可以在此处查看更多详细信息link
    猜你喜欢
    • 1970-01-01
    • 2017-08-15
    • 2018-04-06
    • 1970-01-01
    • 2014-11-09
    • 2012-10-02
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    相关资源
    最近更新 更多