仅向阵列添加最高级别的证书


Add only highest level of certification to array

不太确定如何问这个问题,但它来了:

我在一个旧系统上有三个不同级别的认证(LPCS、LPC、LPCA),我需要将其添加到一个新系统中,以更好地区分不同级别(is_certification)。

我创建了一个阵列,它将根据认证级别捕获信息。我可以将它们添加到阵列中,但我的目标是添加它们已完成的最高级别的认证。例如,LPCS比LPC高,LPC比LPCA高。如果他们已经完成了所有课程,我只希望LPCS添加到数组中,或者如果他们只完成了LPC,我不希望LPCA显示在数组中。

非常感谢您的建议和帮助!

这是代码:

$oldsystem_certs = array();
foreach ($old_expired_cert as $cert){
    if ((strpos($cert->product, 'LPCS') == True) || (strpos($cert->product, 'LPC') == True) || (strpos($cert->product, 'LPCA') == True) && $cert->is_certification==0){
        $at = strtotime(certification_end($cert));
        $bt = strtotime(date("2015-04-15"));
        if($at >= $bt){
        }else{
                array_push($oldsystem_certs, $cert);
        }
    }
}

您需要分别测试每个子字符串。然后,您可以将它们映射到数字认证级别,以使最高级别的测试更容易。请注意,您必须最后检查LPC,因为它是其他证书名称的子字符串。

$cert_levels = array('LPCS' => 3, 'LPCA' => 1, 'LPC' => 2);
$highest_cert_level = 0;
$highest_cert = null;
$at = null;
foreach ($old_expired_cert as $cert) {
    $prod = $cert->product;
    $cert_level = 0;
    foreach ($cert_levels as $certname => $level) {
        if (strpos($prod, $certname) !== false)) {
            if ($level > $highest_cert_level) {
                $highest_cert_level = $level;
                $highest_cert = $cert;
                $at = strtotime(certification_end($cert));
            }
            break;
        }
    }
}
$bt = strtotime(date("2015-04-15"));
if ($highest_cert && $at < $bt) {
    $oldsystem_array[] = $highest_cert;
}

演示