gpt4 book ai didi

php - 比较 PHP 中的通配符版本

转载 作者:行者123 更新时间:2023-12-04 04:34:47 24 4
gpt4 key购买 nike

我正在使用 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"

关于php - 比较 PHP 中的通配符版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19923740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com