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

时间:2015-04-07 16:50:51

标签: php arrays

不太确定如何提出这个问题,但在这里:

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

我创建了一个数组,可以根据认证级别捕获信息。我可以将它们添加到阵列中,但我的目标是添加他们已完成的最高级别的认证。例如,LPCS高于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);
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您需要分别测试每个子字符串。然后,您可以将它们映射到数字认证级别,以便更轻松地进行测试。请注意,您必须最后检查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;
}

DEMO