博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
版本号对比
阅读量:5049 次
发布时间:2019-06-12

本文共 2269 字,大约阅读时间需要 7 分钟。

2016年3月17日 11:02:38 星期四

逻辑一:

1. 拆开点分的版本号

2. 对每一项左边补齐0

3. 重新拼接后, 逐位对比

优点: 对传入的版本号无特别的要求, 重新拼接后从左往右逐位比对, 缺点: 慢

1 /** 2  * desc 点分小版本最多4位 3  * @param $va 待检测版本 4  * @param $vb 基准版本 5  * @return int 如果 va 小于 vb 返回 < 0; 如果 va 大于 vb 返回 > 0;如果两者相等,返回 0 6  */ 7 function compareVersion($va, $vb) 8 { 9     //小版本号补前导零10     $arrVersionA = explode('.', $va);11     $formatVersionA = '';12     foreach ($arrVersionA as $v) {13         $formatVersionA .= str_pad($v, 4, '0', STR_PAD_LEFT);14     }15 16     //小版本号补前导零17     $arrVersionB = explode('.', $vb);18     $formatVersionB = '';19     foreach ($arrVersionB as $v) {20         $formatVersionB .= str_pad($v, 4, '0', STR_PAD_LEFT);21     }22     23     //去掉末尾的024     $formatVersionA = rtrim($formatVersionA, '0');25     $formatVersionB = rtrim($formatVersionB, '0');26     27     // echo $formatVersionA, ' ', $formatVersionB, ' ';28 29     return strcmp($formatVersionA, $formatVersionB);30 }31 32 echo '
';var_dump(compareVersion('0.1.0', '0.1'));  // 00000001 00000001 int(0)33 echo '
';var_dump(compareVersion('0.1.2', '0.2')); // 000000010002 00000002 int(-1)34 echo '
';var_dump(compareVersion('0.1.2', '0.01.20')); // 000000010002 00000001002 int(-1)35 echo '
';var_dump(compareVersion('0.1.2', '0.0.3')); // 000000010002 000000000003 int(1)36 echo '
';var_dump(compareVersion('0.1.2', '0.1.2')); // 000000010002 000000010002 int(0)

 

逻辑二:

1. 用 vsprintf()函数将版本号格式化补前导零

2. 逐位对比

缺点: 必须要求版本号有三个小版本组成, 优点: 逻辑简单,快

 

1 /** 2  * desc 版本号必须由三个小版本组成, 每个小版本号最多4位 3  * @param $va 待检测版本 4  * @param $vb 基准版本 5  * @return int 如果 va 小于 vb 返回 < 0; 如果 va 大于 vb 返回 > 0;如果两者相等,返回 0 6  */ 7 function compareVersion($va, $vb) 8 { 9     $formatVersionA = vsprintf("%04d%04d%04d", explode('.', $va));10     $formatVersionB = vsprintf("%04d%04d%04d", explode('.', $vb));11 12     $formatVersionA = rtrim($formatVersionA, '0');13     $formatVersionB = rtrim($formatVersionB, '0');14     15     return strcmp($formatVersionA, $formatVersionB);16 }17 18 echo '
';var_dump(compareVersion('0.1.2', '0.2.0'));  // -119 echo '
';var_dump(compareVersion('0.1.2', '0.01.20')); // -120 echo '
';var_dump(compareVersion('0.1.2', '0.0.3')); // 121 echo '
';var_dump(compareVersion('0.1.2', '0.1.2')); // 0

 

转载于:https://www.cnblogs.com/iLoveMyD/p/5286536.html

你可能感兴趣的文章
异或链表(XOR Linked List)
查看>>
查看本机打开的端口
查看>>
js闭包(理解)
查看>>
Python codes
查看>>
Centos7部署kubernetes测试k8s应用(九)
查看>>
tranform全点解析
查看>>
js+html5实现视频截图
查看>>
poj 3764 The xor-longest Path Trie
查看>>
python_38_try-except异常处理语句及raise的使用
查看>>
每一个SEO方案都是不同的
查看>>
mvc5+ET6入门第一章
查看>>
第九课 CSRF漏洞和防御
查看>>
NEERC, Northern Subregional Contest 2012 B 乱搞or搜索
查看>>
暴力题,速算24点
查看>>
Mongodb-安装-命令
查看>>
spring-boot-starter-actuator
查看>>
小水王2
查看>>
Android 学习笔记之SharedPreference
查看>>
java的System.getProperty()方法可以获取的值
查看>>
c#中装箱拆箱性能测试
查看>>