版本号对比

简介: 2016年3月17日 11:02:38 星期四 逻辑一: 1. 拆开点分的版本号 2. 对每一项左边补齐0 3. 重新拼接后, 逐位对比 优点: 对传入的版本号无特别的要求, 重新拼接后从左往右逐位比对, 缺点: 慢 1 /** 2 * desc 点分小版本最多4位 3 ...

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     //去掉末尾的0
24     $formatVersionA = rtrim($formatVersionA, '0');
25     $formatVersionB = rtrim($formatVersionB, '0');
26     
27     // echo $formatVersionA, ' ', $formatVersionB, ' ';
28 
29     return strcmp($formatVersionA, $formatVersionB);
30 }
31 
32 echo '<pre>';var_dump(compareVersion('0.1.0', '0.1'));  // 00000001 00000001 int(0)
33 echo '<pre>';var_dump(compareVersion('0.1.2', '0.2')); // 000000010002 00000002 int(-1)
34 echo '<pre>';var_dump(compareVersion('0.1.2', '0.01.20')); // 000000010002 00000001002 int(-1)
35 echo '<pre>';var_dump(compareVersion('0.1.2', '0.0.3')); // 000000010002 000000000003 int(1)
36 echo '<pre>';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 '<pre>';var_dump(compareVersion('0.1.2', '0.2.0'));  // -1
19 echo '<pre>';var_dump(compareVersion('0.1.2', '0.01.20')); // -1
20 echo '<pre>';var_dump(compareVersion('0.1.2', '0.0.3')); // 1
21 echo '<pre>';var_dump(compareVersion('0.1.2', '0.1.2')); // 0

 

SummerPHP 框架

目录
相关文章
|
7月前
|
人工智能 自然语言处理 并行计算
MeteoRA:多任务AI框架革新!动态切换+MoE架构,推理效率提升200%
MeteoRA 是南京大学推出的多任务嵌入框架,基于 LoRA 和 MoE 架构,支持动态任务切换与高效推理。
284 3
|
搜索推荐 API 定位技术
解锁携程美食与景点数据接口:打造个性化旅行体验的秘密武器
携程API助您探索旅游信息,虽无专门“美食列表”接口,但可通过景点详情接口获取周边美食推荐。结合地图或餐饮API,丰富美食数据一手掌握。景点列表接口帮助搜索景点详情,包括名称、位置等。使用流程包括注册账号、获取密钥、构造请求及解析响应数据。记得查阅最新文档,确保合规使用。体验API:[链接]。
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
9大商业GenAI用例
9大商业GenAI用例
|
11月前
|
算法 物联网 定位技术
基于BLE的商业综合体室内定位导航系统:低功耗室内导航与反向寻车
本文介绍了基于BLE技术的商场室内定位导航系统,涵盖系统设计思路、关键技术实现及实际应用效果。系统通过部署BLE信标和利用智能手机等设备,实现精准室内定位与导航,提升消费者购物体验。关键技术包括iBeacon蓝牙定位和A*寻路算法,应用于商场导航、AR实景导航及反向寻车等功能。
403 4
|
存储 关系型数据库 MySQL
⑦【MySQL】什么是约束?如何使用约束条件?主键、自增、外键、非空....
⑦【MySQL】什么是约束?如何使用约束条件?主键、自增、外键、非空....
410 0
|
C++ 编译器
C++ - 虚基类、虚函数与纯虚函数
虚基类       在说明其作用前先看一段代码 class A{public:    int iValue;};class B:public A{public:    void bPrintf(){cout
2904 0
|
IDE 开发工具 Python
【Pycharm】Python运行程序查看所需变量值
在使用pycharm IDE运行Python程序过程中,想查看中间一些变量的值,如何操作?
|
存储 数据可视化 关系型数据库
【nacos】本机电脑、服务器上如何安装配置nacos
【nacos】本机电脑、服务器上如何安装配置nacos
1759 1
【nacos】本机电脑、服务器上如何安装配置nacos
|
存储 JavaScript 小程序
MyBatis Plus 解决大数据量查询慢问题
MyBatis Plus 解决大数据量查询慢问题
|
人机交互 芯片
西门子S7-200 SMART的功能和特点
西门子S7-200 SMART是西门子公司针对中国小型自动化市场客户需求设计研发的一款高性价比小型PLC产品。S7-200 SMART CPU将微处理器、集成电源、输入输出电路组合到一个设计紧凑的外壳中,已形成功能强大的小型plc。面板包含电源接线端子、直流24V电源输出端子、数字量输入输出接线端子、CPU状态指示灯、IO状态指示灯、存储卡插槽、以太网接口、RS485接口等。
西门子S7-200 SMART的功能和特点

热门文章

最新文章