我正在尝试验证3个场景但是有些错误并且if语句没有被正确兑现
以下是我需要处理的方案:
我的结果不正确。例如,如果我正在解析的数据包含“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;
,我可以看到它现在返回多个结果,然后才会给出正确的结果(以红色突出显示正确的匹配)..但为什么它会返回虚假响应而不是仅返回第一次正确回应?
- 更新2 -
我想我理解了我得到的结果,似乎是每次迭代都没有找到字符串时输出结果。而我想做的就是回复一个回复。
我认为因为这可能使用循环不是答案。有没有办法在整个数组中搜索字符串并输出结果而不是循环遍历每个数组?
答案 0 :(得分:1)
if..elseif
甚至更好 - switch
。$validation
变量将始终在每次烦恼中覆盖。所以,如果你正在寻找一个特定的行 - 你应该提到它。如果您最终要查找一个多结果,则需要将该数据存储在另一个数组中。继续聊天,让我打破关键值的场景:
对于我使用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
}
}