现有条件需要一个php循环

时间:2015-04-17 13:00:51

标签: php arrays

我正在寻找一个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次并手动更新第一个框中的数字,但我希望有更优雅的方法来实现这一目标。

- 更多背景 -

enter image description here

- 工作代码 - 由@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";
        }
    }
}

2 个答案:

答案 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增加参考值。在匹配时,breakcontinue代替else if,具体取决于您需要在此完成的操作。你的目标在问题上不太清楚,可以分享更多的洞察力......