2

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

找出包版本“3.1.5”是否属于“3.1”的包依赖过滤器的最佳方法是什么?

我已经尝试过 PHP 原生version_compare函数,但它只适用于标准化的完整版本。

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

提前谢谢

4

1 回答 1

3

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

我的解决方案是获取依赖版本过滤器中的最后一位并加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"
于 2016-05-08T06:57:52.180 回答