比较PHP中的两个版本字符串

比较PHP中的两个版本字符串,php,Php,如何比较版本格式中的两个字符串?以便: version_compare("2.5.1", "2.5.2") => -1 (smaller) version_compare("2.5.2", "2.5.2") => 0 (equal) version_compare("2.5.5", "2.5.2") => 1 (bigger) version_compare("2.5.11", "2.5.2") => 1 (bigger, eleven is bigger t

如何比较版本格式中的两个字符串?以便:

version_compare("2.5.1",  "2.5.2") => -1 (smaller)
version_compare("2.5.2",  "2.5.2") =>  0 (equal)
version_compare("2.5.5",  "2.5.2") =>  1 (bigger)
version_compare("2.5.11", "2.5.2") =>  1 (bigger, eleven is bigger than two)

从使用函数的PHP交互式提示符(自4.1以来内置于PHP)中:


看来PHP已经如您所期望的那样工作了。如果您遇到不同的行为,也许您应该指定这一点

如果您的版本比较不起作用,下面的代码将生成您的结果

function new_version_compare($s1,$s2){
    $sa1 = explode(".",$s1);
    $sa2 = explode(".",$s2);
    if(($sa2[2]-$sa1[2])<0)
        return 1;
    if(($sa2[2]-$sa1[2])==0)
        return 0;
    if(($sa2[2]-$sa1[2])>0)
        return -1;
}
函数新版本比较($s1,$s2){
$sa1=爆炸(“.”,$s1);
$sa2=爆炸(“.”,$s2);
如果($sa2[2]-$sa1[2])0
返回-1;
}

您可以解析每个字符串,在点处停止,然后将每个数字添加到单独的整数中

因此字符串2.5.1将变成3个整数:

$ver1 . "." . $ver2 . "." . $ver3
您的字符串2.5.11将变成:

$ver1_2 . "." . $ver2_2 . "." . $ver3_2

然后一组if将$ver1与$ver1\u 2进行比较,依此类推。

此外,您还可以通过向
version\u compare()传递额外参数来使用PHP内置函数,如下所示。


如需进一步查询,请参阅。

我已经开发了此功能。我希望有帮助。它可以走到任何长度

function updateAppVersion($appVersion1, $appVersion2)
{
    $releaseVersion = explode(".",$appVersion1);
    $deviceVersion = explode(".",$appVersion2);

    $len = count($deviceVersion);
    if(count($releaseVersion)>count($deviceVersion)){
        $len = count($releaseVersion);
    }

    for($i = 0;$i<$len;$i++){
        echo "[i=".$i."][r=".$releaseVersion[$i]."][d=".$deviceVersion[$i]."]";
        if(!isset($releaseVersion[$i])){
            return false;
        }
        else if(!isset($deviceVersion[$i])){
            return true;
        }
        else if($releaseVersion[$i]>$deviceVersion[$i]){
            return true;
        }
        else if($releaseVersion[$i]<$deviceVersion[$i]){
            return false;
        }

    }

    return false;
}
函数updateAppVersion($appVersion1,$appVersion2)
{
$releaseVersion=分解(“.”,$appVersion1);
$deviceVersion=分解(“.”,$appVersion2);
$len=计数($deviceVersion);
if(计数($releaseVersion)>计数($deviceVersion)){
$len=计数($releaseVersion);
}
对于($i=0;$i$deviceVersion[$i]){
返回true;
}

否则,如果($releaseVersion[$i]可能是“自然顺序”,你试过了吗?php的内置代码有什么问题?在你问之前测试你的代码。我可能会工作(就像你的情况一样)-1。@hakre,我的错。我在谷歌上搜索了所有的strcmp,但是…这是我的错。是的,有时它不是看到树木而看到树木。你在问题中选择了正确的函数却没有看到它,这有点讽刺;)可以确认。只是有效。所有PHP版本。自然顺序比较也是如此。这就是为什么我说如果它对你不起作用(出于某种原因,它不起作用,否则他不会问)。但是为了确保我将它编辑为一个新的函数
if(version_compare('2.5.2', '2.5.1', '>')) {
 print "First arg is greater than second arg";
}
function updateAppVersion($appVersion1, $appVersion2)
{
    $releaseVersion = explode(".",$appVersion1);
    $deviceVersion = explode(".",$appVersion2);

    $len = count($deviceVersion);
    if(count($releaseVersion)>count($deviceVersion)){
        $len = count($releaseVersion);
    }

    for($i = 0;$i<$len;$i++){
        echo "[i=".$i."][r=".$releaseVersion[$i]."][d=".$deviceVersion[$i]."]";
        if(!isset($releaseVersion[$i])){
            return false;
        }
        else if(!isset($deviceVersion[$i])){
            return true;
        }
        else if($releaseVersion[$i]>$deviceVersion[$i]){
            return true;
        }
        else if($releaseVersion[$i]<$deviceVersion[$i]){
            return false;
        }

    }

    return false;
}