[英]version_compare to check for major and minor versions
I would like to have a function like PHP's version_compare()
which let me compare version and consider minor/major version numbers. 我想要一个类似PHP的version_compare()
的函数,该函数可让我比较版本并考虑次要/主要版本号。
My method should look like 我的方法应该像
function my_version_compare($new_version, $old_version, $operator, $only_minor = false){
...
return (bool) $do_update;
}
a major version update is from 2.1
to 2.2
for instance while a minor is from 2.1
to 2.1.1
例如,主要版本从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
Basically I like to let the users decide if an auto update should be made on minor versions only or in any case 基本上,我想让用户决定是否应该仅在次要版本上进行自动更新,或者在任何情况下都应进行自动更新
What I currently have works just with 2.x
to 3.x
updates: 我目前拥有的功能仅适用于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);
}
}
After some fiddling I came up with this: 经过一番摆弄之后,我想到了这个:
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);
}
Feel free to improve this snippet! 随时改进此代码段!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.