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版本比较函数version_compare()
- PHP 版本判断 version_compare() 函数
- php版本比较函数version_compare()
- php版本比较函数version_compare()
- PHP 版本判断 VERSION_COMPARE() 函数
- PHP 版本判断 version_compare() 函数
- 约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
- PHP 自定义函数实现系统函数功能
- 实例讲解PHP中实现代码重用的两个函数
- 约瑟夫环问题的 PHP 实现--使用 PHP 数组内部指针操作函数
- php利用header函数实现文件下载时直接提示保存
- php利用header函数实现文件下载时直接提示保存
- 使用函数递归实现基于php和MySQL的动态树型菜单
- 在PHP中实现Javascript的escape()函数代码
- PHP下escape解码函数的实现方法
- 用js进行url编码后用php反解以及用php实现js的escape功能函数总结
- 用js进行url编码后用php反解以及用php实现js的escape功能函数
- 使用函数递归实现基于php和MySQL的动态树型菜单
- php下实现在指定目录搜索指定类型文件的函数