比较 PHP 中的通配符版本


Compare wildcard versions in PHP

我正在使用 Zend Framework 2 构建一个包管理系统。有一次,我必须将包版本与包依赖项筛选器进行比较。版本必须是完整的版本,例如:"3.1.5"。但包装依赖项筛选器可以包含通配符。例如"3.1",这意味着包依赖项筛选器可以是从"3.1.0"到"3.1.AnyNumber"的任何版本。

找出包版本"3.1.5"是否属于包依赖项筛选器"3.1"的最佳方法是什么?

我已经尝试过 PHP 本机 version_compare 函数,但这仅适用于标准化的完整版本。

目前我的解决方案是分解版本和过滤器,然后将子版本与子过滤器进行比较。但我对我的解决方案不满意。

提前感谢

有点晚了,但我只是偶然发现了同样的问题。

我的解决方案是获取依赖项版本过滤器中的最后一位数字并添加 1,然后使用版本比较函数的第三个参数更改为仅"大于"(不大于或等于)。

您还需要使用"小于或等于"检查较低版本

所以在您的情况下:

$pv = "3.1.5" // package version
$dv = "3.1" // dependency version filter    
$dv_max = substr($dv, 0, strrpos($dv, ".")+1).(1 + substr($dv, strrpos($dv, ".")+1));
// $dv_max = 3.2
return version_compare($dv_max, $pv, ">") && version_compare($dv, $pv, "<=")
// true or false
// transalates to: return "3.2" > "3.1.5" And "3.1" <= "3.1.5"
// works with range: "3.1" ... "3.1.Anything"