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

本文共 2217 字,大约阅读时间需要 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

 

转载地址:http://wnwzo.baihongyu.com/

你可能感兴趣的文章
php 5.4.24 win32,PHP 5.4.14 和 PHP 5.3.24 发布
查看>>
oracle top pid,Linux Top 命令解析 比较详细
查看>>
grub如何进入linux系统,Linux操作系统启动管理器-GRUB
查看>>
linux pbs 用户时间,【Linux】单计算机安装PBS系统(Torque)与运维
查看>>
linux系统可用内存减少,在Linux中检查可用内存的5种方法
查看>>
linux 脚本map,Linux Shell Map的用法详解
查看>>
linux mariadb忘记密码,Linux上mariadb重置密码
查看>>
如何在linux系统下配置共享文件夹,如何在windows和Linux系统之间共享文件夹.doc
查看>>
thinkpad装linux无线网卡驱动,ThinkPad E530 Fedora 20 下无线网卡驱动的安装
查看>>
linux磁盘管理是什么东西,Linux磁盘管理详解
查看>>
linux卸载软件出现依赖,关于ubuntu循环依赖软件的删除
查看>>
linux操作系统加固软件,系统安全:教你Linux操作系统的安全加固
查看>>
linux中yum源安装dhcp,24.Linux系统下动态网络源部署方法(dhcpd)
查看>>
linux屏幕复制显示出来的,linux – stdout到gnu屏幕复制缓冲区
查看>>
c语言规定数据长度,C语言中各种数据类型长度
查看>>
android l 新功能,Android L SDK -- 一些有趣的新功能
查看>>
android中心打开式动画,android 围绕中心旋转动画
查看>>
android 键盘 光标位置不对,鼠标定位不准的解决方法大全
查看>>
android pokemon go 虚拟定位,《Pokemon GO》推出全新道具 每年可转一次队伍
查看>>
控件拉伸(转)
查看>>