php 比较任意两个版本号的大小

自己写的。

function versionCompare($a, $b)
{   
    // a,b已存在、非空字符串或者非零
    if (empty($a) || empty($b)) 
        return "errmsg:不可为空。";

    // 字符串必须为用'.'隔开的数字串
    $rule = "/^\d+(\.\d+)*$/";
    $aMat = preg_match($rule, $a);
    $bMat = preg_match($rule, $b);
    if (!$aMat || !$bMat) 
        return "errmsg: 必须为用'.'隔开的数字串。";

    // 移除最后的.0
    $a = explode(".", rtrim($a, ".0")); 
    $b = explode(".", rtrim($b, ".0")); 

    foreach ($a as $depth => $aVal)
    { 
        if (isset($b[$depth])){ 
            if ($aVal > $b[$depth]) return '>'; 
            else if ($aVal < $b[$depth]) return '<';
        }else{
            return '>'; 
        }
    }
    return (count($a) < count($b)) ? '<' : '=';
} 

几种异常情况的考虑, test:

// test1 a=1.0.0 b=1
echo "1.0.0".versionCompare('1.0.0', '1')."1<br/>";

// test2 a=7.10.2 b=7.2.10
echo "7.10.2".versionCompare('7.10.2', '7.2.10')."7.2.10<br/>";

// test3 a=abc b=7.8.9.10
echo "这个应该是错的--".versionCompare('abc', '7.8.9.10')."<br/>";

//test4 a="" b=1.2.4
echo "这个也应该是错的--".versionCompare('', '1.2.4')."<br/>";

//正确格式的版本号 a=1.2.4 b=6.5.6
echo "1.2.4".versionCompare('1.2.4', '6.5.6')."6.5.6<br/>";

P.S. 其实这是一个公司的面试题。但他说我不符合要求。我觉得我写的很完美啊,没有get到他的点?[耸肩]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值