我正在寻找一个PHP解决方案来使用循环来捕获所有数据
以下是不使用循环的查找示例
if (array_key_exists('utf8String', $cert['tbsCertificate']['subject']['rdnSequence'][0][0]['value'])) {
// do somthing
} else if (array_key_exists('printableString', $cert['tbsCertificate']['subject']['rdnSequence'][0][0]['value'])) {
// do somthing
} else if (array_key_exists('bmpString', $cert['tbsCertificate']['subject']['rdnSequence'][0][0]['value'])) {
// do somthing
} else if (array_key_exists('telextexString', $cert['tbsCertificate']['subject']['rdnSequence'][0][0]['value'])) {
// do somthing
}
我需要循环遍历整个数组。对于 ONLY ,第一个[]循环应该将整数[0]增加到1,[2]等等,直到它完成整个批次。如果你想知道,第二个[]总是[0],所以需要保持不变。
现在我正在复制/粘贴上面约20次并手动更新第一个框中的数字,但我希望有更优雅的方法来实现这一目标。
- 更多背景 -
- 工作代码 - 由@Ghost提供
$count = count($cert['tbsCertificate']['subject']['rdnSequence']);
$exists = array('utf8String', 'printableString', 'teletexString');
$oid = array('id-at-stateOrProvinceName', 'id-at-countryName', 'id-at-localityName', 'id-at-commonName', 'id-at-organizationalUnitName');
for($i = 0; $i < $count; $i++) {
foreach($exists as $field) {
if(array_key_exists($field, $cert['tbsCertificate']['subject']['rdnSequence'][$i][0]['value'])) {
$value = $cert['tbsCertificate']['subject']['rdnSequence'][$i][0]['value'][$field];
echo $value, ' [',$field, ']',"\n";
}
}
}
答案 0 :(得分:2)
你可以在将每个字段应用到array_key_exists
中时添加另一个循环,这无论如何都适用于@Markus的想法:
$count = count($cert['tbsCertificate']['subject']['rdnSequence']);
$exists = array('utf8String', 'printableString', 'teletexString');
$oid = array('id-at-stateOrProvinceName', 'id-at-countryName', 'id-at-localityName', 'id-at-commonName', 'id-at-organizationalUnitName');
for($i = 0; $i < $count; $i++) {
foreach($exists as $field) {
if(array_key_exists($field, $cert['tbsCertificate']['subject']['rdnSequence'][$i][0]['value'])) {
$value = $cert['tbsCertificate']['subject']['rdnSequence'][$i][0]['value'][$field];
$k = array_keys($cert['tbsCertificate']['subject']['rdnSequence'][$i][0]['type']);
$oid = reset($k);
break;
}
}
}
答案 1 :(得分:1)
[编辑:请参阅以下评论。对简单来说怎么样......
$strings = ['utf8String', 'printableString' ... ];
foreach ($strings as $string) { // do your checks etc. }
我想你知道如何在循环中递增计数器。 $i++
和其他内容,请在[$i]
数组中使用$cert
增加参考值。在匹配时,break
或continue
代替else if
,具体取决于您需要在此完成的操作。你的目标在问题上不太清楚,可以分享更多的洞察力......