Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较PHP中的通配符版本_Php_Compare_Versioning - Fatal编程技术网

比较PHP中的通配符版本

比较PHP中的通配符版本,php,compare,versioning,Php,Compare,Versioning,我正在用Zend Framework 2构建一个包管理系统。 在某一点上,我必须将包版本与包依赖项筛选器进行比较。 该版本必须是完整的版本,例如:“3.1.5”。但是Package依赖项筛选器可以包含通配符。例如“3.1”,这意味着包依赖项筛选器可以是从“3.1.0”到“3.1.AnyNumber”的任何版本 确定包版本“3.1.5”是否属于“3.1”的包依赖项筛选器的最佳方法是什么 我已经尝试过PHP本机函数,但这只适用于标准化的完整版本 目前我的解决方案是分解版本和过滤器,然后将Subver

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

确定包版本“3.1.5”是否属于“3.1”的包依赖项筛选器的最佳方法是什么

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

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


提前感谢

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

我的解决方案是获取依赖项版本筛选器中的最后一位数字并添加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"
$pv=“3.1.5”//软件包版本
$dv=“3.1”//dependency版本筛选器
$dv_max=substr($dv,0,strrpos($dv,“.”+1)。(1+substr($dv,strrpos($dv,“.”+1));
//$dv_max=3.2

返回version\u compare($dv\u max,$pv,“>”)&&version\u compare($dv,$pv,“为什么不使用
=3.1.0
而不是通配符呢?我已经考虑过了,但这意味着重新定义我的数据库并重新定义包的结构方式。