您的位置:首页 > 编程语言 > PHP开发

PHP实现函数version_compare

2017-03-10 22:37 267 查看
自己写的,肯定还有更加简便的方法。。。。

<?php
function version_compare2($v1, $v2)
{
try{

if( strlen($v1) < 3 || strlen($v2) < 3 ){
throw new InvalidArgumentException("版本号格式输入错误");
}
$arr = array('dev','alpha','a','beta','b','rc','#','pl','p');
$pattern = '/[a-z#]+/';
preg_match($pattern,strtolower($v1),$res1);
preg_match($pattern,strtolower($v2),$res2);
if( isset($res1[0])  ){
if(!in_array($res1[0],$arr)) {
throw new InvalidArgumentException($v1."版本号输入错误");
}
}
if(  isset($res2[0]) ){
if(!in_array($res2[0],$arr)) {
throw new InvalidArgumentException($v2."版本号输入错误");
}
}
} catch (InvalidArgumentException $e) {
echo  $e->getMessage();
exit;
}

$replace = array("_", "-","+");
$v1 = str_replace($replace, ".", strtolower($v1));
$v2 = str_replace($replace, ".", strtolower($v2));

$search = array('/\.*dev\.*/','/\.*\ba\b\.*/','/\.*\bb\b\.*/','/\.*rc\.*/','/\.*alpha\.*/','/\.*
beta\.*/','/\.*pl\.*/','/\.*\bp\b\.*/','/\.*#\.*/');
$rep = array('.dev.','.a.','.b.','.rc.','.alpha.','.beta.','.pl.','.p.','.#.');
$v1 = preg_replace ($search, $rep, $v1);
$v2 = preg_replace ($search, $rep, $v2);

$v1 = explode(".", $v1);
$v2 = explode(".", $v2);

foreach ($v1 as $depth => $aVal)
{
if (isset($v2[$depth]))
{
$num1 = getNum($aVal);
$num2 = getNum($v2[$depth]);

if($num1==0 && $num2 == 0)
{
if($aVal > $v2[$depth])
{
echo "第一个版本号 > 第二个版本号";
exit;
}elseif ($aVal < $v2[$depth]) {
echo "第一个版本号 < 第二个版本号";
exit;
}
}elseif ($num1 < $num2 ) {
echo "第一个版本号 < 第二个版本号";
exit;
}elseif ($num1 > $num2 ) {
echo "第一个版本号 > 第二个版本号";
exit;
}

}else{

echo "第一个版本号 > 第二个版本号";
exit;
}
}

$result =  (count($v1) < count($v2)) ? -1 : 0;
if($result == -1)
{
echo "第一个版本号 < 第二个版本号";
}else{
echo "第一个版本号 = 第二个版本号";
}
}

function getNum($val)
{
switch ($val)
{
case 'dev':
return 1;
break;
case 'alpha':
return 2;
break;
case 'a':
return 2;
break;
case 'beta':
return 3;
break;
case 'b':
return 3;
break;
case 'rc':
return 4;
break;
case '#':
return 5;
break;
case 'pl':
return 6;
break;
case 'p':
return 6;
break;
default:
return 0;
}

}

// $v1 = '4.3.2';
// $v2 = '4.3.2';
// version_compare2($v1,$v2);//第一个版本号 = 第二个版本号

// $v3 = '4.3.2_dev';
// $v4 = '4.3.2_pl';
// version_compare2($v3,$v4);//第一个版本号 < 第二个版本号

// $v5 = '4.3.2RC1';
// $v6 = '4.3.2RC2';
// version_compare2($v5,$v6);//第一个版本号 < 第二个版本号

// $v7 = '4.3.1';
// $v8 = '4.3.2';
// version_compare2($v7,$v8);//第一个版本号 < 第二个版本号

// $vv1 = '4.3.2#';
// $vv2= '4.3.2+alpha';
// version_compare2($vv1,$vv2);//第一个版本号 > 第二个版本号

// $vv3 = '4.3.2_beta';
// $vv4 = '4.3.2_p';
// version_compare2($vv3,$vv4);//第一个版本号 < 第二个版本号

$vv5 = '4.3.2_b';
$vv6 = '4.3.2_a';
version_compare2($vv5,$vv6);//第一个版本号 > 第二个版本号

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数 php