PHP解决方案 - 检查字符串值是否在数组中(不工作)

时间:2015-05-11 05:22:09

标签: php

我正在尝试验证3个场景但是有些错误并且if语句没有被正确兑现

以下是我需要处理的方案:

  1. 如果数组中存在字符串“2.5.4.15”,则输出“扩展验证”。
  2. 如果数组中不存在字符串“2.5.4.15”,则输出“Organization Validated”。
  3. 如果数组中不存在字符串“id-at-organizationName”,则输出“Domain Validated”。
  4. 我的结果不正确。例如,如果我正在解析的数据包含“2.5.4.15”由于某种原因它返回“Domain Validated”??

    这是我的代码:

        if(isset($cert['tbsCertificate']['subject']['rdnSequence'])) {
            $EV = array('2.5.4.15');
            $org = array('id-at-organizationName');
            $count = count($cert['tbsCertificate']['subject']['rdnSequence']);
            for($i = 0; $i < $count; $i++) {
                if(in_array($cert['tbsCertificate']['subject']['rdnSequence'][$i][0]['type'], $EV)) {
                    $validation = "<tr><td>Validation</td><td>Extended Validation (EV)</td></tr>";
                    echo $validation;
                    break;
                }
                if(!in_array($cert['tbsCertificate']['subject']['rdnSequence'][$i][0]['type'], $EV)) {
                    $validation = "<tr><td>Validation</td><td>Organization Validated (OV)</td></tr>";
                    echo $validation;
                    break;
                }
                if(!in_array($cert['tbsCertificate']['subject']['rdnSequence'][$i][0]['type'], $org)) {
                    $validation = "<tr><td>Validation</td><td>Domain Validated (DV)</td></tr>";
                    echo $validation;
                    break;
                }
            }
        }
    

    - 更新 -

    我删除了break;,我可以看到它现在返回多个结果,然后才会给出正确的结果(以红色突出显示正确的匹配)..但为什么它会返回虚假响应而不是仅返回第一次正确回应?

    enter image description here

    - 更新2 -

    我想我理解了我得到的结果,似乎是每次迭代都没有找到字符串时输出结果。而我想做的就是回复一个回复。

    我认为因为这可能使用循环不是答案。有没有办法在整个数组中搜索字符串并输出结果而不是循环遍历每个数组?

2 个答案:

答案 0 :(得分:1)

  • 我不明白你为什么要使用&#39; array&#39;要存储单个值,您可以简单地比较字符串。
  • 如果该字段只能与一个选项匹配 - 您可以使用if..elseif甚至更好 - switch
  • 请注意,您的$validation变量将始终在每次烦恼中覆盖。所以,如果你正在寻找一个特定的行 - 你应该提到它。如果您最终要查找一个多结果,则需要将该数据存储在另一个数组中。

继续聊天,让我打破关键值的场景:

  1. 如果阵列中存在2.5.4.15 - 则返回EV
  2. 如果它(1)不存在但是&#39; id-at-organizationName&#39;确实 - 返回
  3. 如果它(1)不存在且(2)也不存在 - 返回
  4. 对于我使用break的第一个场景,因为如果它存在,我们不需要继续检查阵列的其余部分,它也会自动意味着其他两个条件永远不会存在。 编辑还在第二种情况条件中添加了break

    以下是我的建议:(请检查并分享聊天中的输出/问题,直到完成以解决您的问题)

           if(isset($cert['tbsCertificate']['subject']['rdnSequence'])) {
                $count = count($cert['tbsCertificate']['subject']['rdnSequence']);
                for($i = 0; $i < $count; $i++) {
                   $value = $cert['tbsCertificate']['subject']['rdnSequence'][$i][0]['type'];
                   if($value == "2.5.4.15") {
                      $output = "EV";
                      break;
                   } else {
                      if($value == "id-at-organizationName") {
                        $output = "OV";
                        break; //Edit 1
                      } else {
                        $output = "DV";
                      }
                   }
                }
    echo $output;
           }
    

答案 1 :(得分:0)

echo个坏变量:

         for($i = 0; $i < $count; $i++) {
            if(in_array($cert['tbsCertificate']['subject']['rdnSequence'][$i][0]['type'], $EV)) {
                $validation = "<tr><td>Validation</td><td>Extended Validation (EV)</td></tr>";
                echo $validation;
                break;
            }
            if(!in_array($cert['tbsCertificate']['subject']['rdnSequence'][$i][0]['type'], $EV)) {
                $validation1 = "<tr><td>Validation</td><td>Organization Validated (OV)</td></tr>";
                echo $validation1;  // $validation1 instead of $validation
                break;
            }
            if(!in_array($cert['tbsCertificate']['subject']['rdnSequence'][$i][0]['type'], $org)) {
                $validation2 = "<tr><td>Validation</td><td>Domain Validated (DV)</td></tr>";
                echo $validation2; // $validation2 instead of $validation
                break;
            }
        }

第二件事是,对于此任务,最好使用elseif而不是3 if s:

for () {
    if () {
        // validation
    } elseif () {
        // validation 1
    } elseif () {
        // validation 2
    }
}