使用通配符解析包版本以在 PHP 中进行比较

问题描述

我正在尝试使用 <?PHP session_start(); if (!is_array($_SESSION)) { $_SESSION['persistentValues'] = array(); } if (isset($_POST['button'])) { $_SESSION['persistentValues'][] = $_POST['button']; } foreach ($_SESSION as $value) { echo $value; } if (isset($_POST["result"])) { $p = eval($value.";"); echo $p; } ?> 比较 <?PHP include ('./array.PHP'); ?> <div style="padding-left:40px"> <h2> PHP Calculator</h2> <form method="post" action=""> Enter value: <input type="text" name="value"> <br> <br> <div style="padding-left: 105px"> <input type="submit" value="9" name="button"> <input type="submit" value="8" name="button"> <input type="submit" value="7" name="button"> <input type="submit" value="+" name="button"> <br> <input type="submit" value="6" name="button"> <input type="submit" value="5" name="button"> <input type="submit" value="4" name="button"> <input type="submit" value="-" name="button" style="padding-left: 9px"> <br> <input type="submit" value="3" name="button"> <input type="submit" value="2" name="button"> <input type="submit" value="1" name="button"> <input type="submit" value="/" name="button" style="padding-left: 9px"> <br> <input type="submit" value="0" name="button" style="padding-left:33px"> <input type="submit" value="." name="button" style="padding-right:9px"> <input type="submit" value="x" name="button" style="padding-left: 7px"> <br> </div> <br> <input type="submit" value="Calculate" name="result"> </form> </div> 等软件包版本,但没有得到预期的结果。

我正在像这样分解版本

^6.1||^6.2||^6.3

这适用于 \Composer\Semver\VersionParser 为 6.3 的情况,但我认为 $currentVersion = '6.3'; $requiredPackage = '^6.1||^6.2||^6.3'; $compatibLeversions = explode('||',$requiredPackage); $lowestSupported = ltrim(current($compatibLeversions),'^'); $highestSupported = ltrim(end($compatibLeversions),'^'); $parser = new VersionParser(); $lowestSupported = $parser->normalize($lowestSupported); $highestSupported = $parser->normalize($highestSupported); $isLower = version_compare($currentVersion,$lowestSupported,'<'); $isHigher = version_compare($currentVersion,$highestSupported,'>'); if ($isLower || $isHigher) { return false; } 会失败,因为虽然 $currentVersion 匹配包,但由于 6.3.4.0 规范了版本^6.3 改为 VersionParser,并且它无法正确解析 6.3 以允许 6.3.0.0

有什么想法吗?

解决方法

我能够使用 Nico Haase 的建议完成它,如下所示:

$isLower = Comparator::lessThan($currentVersion,$lowestSupported);
$isHigher = Comparator::greaterThan($highestSupported,$currentVersion);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...