版本\比较以检查主要版本和次要版本 我希望有一个PHP的功能,它让我比较版本,考虑次要版本号。

版本\比较以检查主要版本和次要版本 我希望有一个PHP的功能,它让我比较版本,考虑次要版本号。,php,version,Php,Version,我的方法应该是 function my_version_compare($new_version, $old_version, $operator, $only_minor = false){ ... return (bool) $do_update; } 例如,主要版本更新是从2.1到2.2,而次要版本更新是从2.1到2.1.1 my_version_compare('2.2', '2.1', '>', false); //true my_version_compare

我的方法应该是

function my_version_compare($new_version, $old_version, $operator, $only_minor = false){
    ...
    return (bool) $do_update;
}
例如,主要版本更新是从
2.1
2.2
,而次要版本更新是从
2.1
2.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.x
3.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);
    }
}

在做了一些修改之后,我想到了这个:

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);

}

请随意改进这个片段

当然可以!我只是觉得这对其他人有用。我已经添加了一个我已经有过的方法,你看,那好多了!:)我也喜欢用“正确的方式”去做。它应该适用于所有格式
version\u compare()
都可以处理,而且从头开始做通常是不可靠的,你有没有考虑过?您的版本与此方案非常相似。还有一个很好的解决方法!看起来有点复杂,适合我的需要。我可以用一些定制的解决方案