version_compare检查主要版本和次要版本

时间:2015-06-02 09:15:18

标签: php version

我希望有一个像PHP version_compare()这样的功能,让我可以比较版本并考虑次要/主要版本号。

我的方法看起来应该是

function my_version_compare($new_version, $old_version, $operator, $only_minor = false){
    ...
    return (bool) $do_update;
}

主要版本更新是从2.12.2,例如,辅音是从2.12.1.1

my_version_compare('2.2', '2.1', '>', false); //true
my_version_compare('2.2', '2.1', '>', true); //false
my_version_compare('2.1.1', '2.1', '>', false); //true
my_version_compare('2.1.1', '2.1', '>', true); //true

基本上我想让用户决定是否应该仅对次要版本进行自动更新,或者无论如何

我目前的工作仅适用于2.x3.x次更新:

function my_version_compare($new_version, $old_version, $operator, $only_minor = false){
    if($only_minor){
        return (bool) version_compare($new_version, $old_version, $operator)
                && !version_compare(intval($new_version), intval($old_version), $operator);
    }else{
        return (bool) version_compare($new_version, $old_version, $operator);
    }
}

1 个答案:

答案 0 :(得分:0)

经过一番摆弄,我想出了这个:

function my_version_compare($new_version, $old_version, $operator, $only_minor = false){

    $pos = 1; //position to indicate what's a major version (x.[x].x.x = 1)

    if($only_minor){

        //get parts as array and remove trailing zeros
        $new = explode(".", rtrim($new_version, ".0"));
        $old = explode(".", rtrim($old_version, ".0"));

        //check if it's a major version update
        $is_major_update = version_compare($new[$pos], $old[$pos], $operator) || version_compare(intval($new_version), intval($old_version), $operator);

        //check if it's a minor update
        $is_minor_update = (!$is_major_update && version_compare(strstr($new_version, '.'), strstr($old_version, '.'), $operator));

        return $is_minor_update;
    }

    return version_compare($new_version, $old_version, $operator);

}

随意改进此片段!