PHP实现函数version_compare
来源:互联网 发布:网络三大奇书之一 编辑:程序博客网 时间:2024/06/14 08:57
自己写的,肯定还有更加简便的方法。。。。
<?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);//第一个版本号 > 第二个版本号 ?>
0 0
- PHP实现函数version_compare
- php版本比较函数version_compare()
- php版本比较函数version_compare()
- PHP 版本判断 VERSION_COMPARE() 函数
- PHP 版本判断 version_compare() 函数
- version_compare()
- asort函数php实现
- PHP 分页实现函数
- PHP实现函数重载
- PHP内置字符串函数实现
- PHP内置字符串函数实现
- php 实现相对路径函数
- JavaScript 实现php函数功能
- PHP实现时间转换函数
- php crypt函数java实现
- js实现php函数urlencode
- php中实现escape函数
- PHP实现内部函数explode
- 结构化得到广泛的个人
- PAT1003
- 攻破JAVA NIO技术壁垒
- c# winform 打包(带数据库安装)
- P3386 【模板】二分图匹配(网络流与线性规划24题01飞行员配对方案问题)
- PHP实现函数version_compare
- SSM框架使用POI技术导出Excel表
- JAVA异常处理机制
- 初识HTML标记语言
- Android手机平板两不误,使用Fragment实现兼容手机和平板的程序
- 520. Detect Capital
- 第一章 linux简介 第二章 从内核出发
- 简单的js开关灯效果(附图)
- linux下python安装