PHP实现函数version

    xiaoxiao2021-03-25  94

    自己写的,肯定还有更加简便的方法。。。。

    <?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);//第一个版本号 > 第二个版本号 ?>
    转载请注明原文地址: https://ju.6miu.com/read-25997.html

    最新回复(0)