version_compare('5.2', '5.2.0'); // returns -1, as if the second parameter is greater!
5.2 和 5.2.0 不应该相等吗?(不是 5.2 和 5.2.0.0 也相等)?
version_compare('5.2', '5.2.0'); // returns -1, as if the second parameter is greater!
5.2 和 5.2.0 不应该相等吗?(不是 5.2 和 5.2.0.0 也相等)?
文档说它比较了“两个“PHP-standardized”版本号字符串。
您将一个 PHP 标准化版本号字符串与一个非 PHP 标准化版本号字符串进行比较。
这是一个经过调整的比较函数,通过修剪零版本后缀组件,即5.2.0
-> ,其行为符合预期5.2
。
var_dump(my_version_compare('5.1', '5.1.0')); // 0 - equal
var_dump(my_version_compare('5.1', '5.1.0.0')); // 0 - equal
var_dump(my_version_compare('5.1.0', '5.1.0.0-alpha')); // 1 - 5.1.0.0-alpha is lower
var_dump(my_version_compare('5.1.0-beta', '5.1.0.0')); // -1 - 5.1.0-beta is lower
function my_version_compare($ver1, $ver2, $operator = null)
{
$p = '#(\.0+)+($|-)#';
$ver1 = preg_replace($p, '', $ver1);
$ver2 = preg_replace($p, '', $ver2);
return isset($operator) ?
version_compare($ver1, $ver2, $operator) :
version_compare($ver1, $ver2);
}
5.2 和 5.2.0 都是 PHP 标准化的版本号字符串。AFAIU 5.2 代表 5.2.0、5.2.1 等。结果是合乎逻辑的,例如 5.2 不能等于 5.2.1 或 5.2.0,也不能大于 5.2.0。
所以只有预期的行为是 5.2 < 5.2.0, 5.2 < 5.2.1, ...
顺便说一句,甚至文档都指出:
这样不仅可以比较“4.1”和“4.1.2”等不同级别的版本,还可以比较...
快速 PHP 函数来确定一个版本是否高于其他版本:
$v1 = "1.101.9999";
$v2 = "1.2";
if ( semver($v1, $v2) ) {
echo "v1 is greater than v2";
}
function semver($v1, $v2, $version_separator = ".") {
// DTSC
$v1_sub = explode($version_separator, $v1);
$v2_sub = explode($version_separator, $v2);
for ($i=0; $i < sizeof($v1_sub); $i++) {
if ( !isset($v2_sub[$i]) ) {
$v2_sub[$i] = 0;
}
if ( intval($v1_sub[$i]) > intval($v2_sub[$i]) ) {
return true;
} else if ( intval($v1_sub[$i]) < intval($v2_sub[$i]) ) {
return false;
}
}
return false; // Versions are equal - Change this value if you need a specific return for equal versions
}