PHP實現的版本號比較

2021-07-30 11:19:46 字數 2183 閱讀 5072

<?php

/** 版本號比較 by sam 20170412

* @param $version1 版本a 如:5.3.2

* @param $version2 版本b 如:5.3.0

* @return int -1版本a小於版本b , 0版本a等於版本b, 1版本a大於版本b

** 版本號格式注意:

* 1.要求只包含:點和大於等於0小於等於2147483646的整數 的組合

* 2.boole型 true置1,false置0

* 3.不設位預設補0計算,如:版本號5等於版號5.0.0

* 4.不包括數字 或 負數 的版本號 ,統一按0處理

** @example:

* if (versioncompare('5.2.2','5.3.0')<0)

*/function

versioncompare

($versiona,$versionb)

$dm = '.';

$verlista = explode($dm, (string)$versiona);

$verlistb = explode($dm, (string)$versionb);

$len = max(count($verlista),count($verlistb));

$i = -1;

while ($i++<$len)

$verlistb[$i] = intval(@$verlistb[$i]);

if ($verlistb[$i] <0 )

if ($verlista[$i]>$verlistb[$i]) else

if ($verlista[$i]<$verlistb[$i]) else

if ($i==($len-1))

}}//驗證,應該放在另乙個檔案中

function

myasserthandler

($file, $line)

assert_options(assert_callback, 'myasserthandler');

//常規驗證

assert(versioncompare('5.3.2','5.3.1')===1);

assert(versioncompare('5','5.3.1')===-1);

assert(versioncompare('5.0.0','5')===0);

assert(versioncompare('5.0.1','5.2.1')===-1);

assert(versioncompare('5.0.0','5.0.1')===-1);

//0驗證

assert(versioncompare('0.0.1','0.1.0')===-1);

assert(versioncompare('0','0') === 0);

assert(versioncompare('1.0','0') === 1);

assert(versioncompare('1.1','0') === 1);

//負數驗證

assert(versioncompare('1.-1','0') === 1);

assert(versioncompare('-1','0') === 0);

//boolean驗證

assert(versioncompare(true,false) === 1);

assert(versioncompare(false,true) === -1);

assert(versioncompare(true,'1.0.0') === 0);

assert(versioncompare(false,'0') === 0);

//字母驗證

assert(versioncompare('a.a','0') === 0);

assert(versioncompare('0','a.a.0') === 0);

//超大數驗證

assert(versioncompare('2147483645','2147483646') === -1);

trycatch(\exception

$e)echo

"驗證通過\n";

比較版本號

題目 比較兩個版本號 version1 和 version2。如果 version1 version2 返回 1,如果 version1 version2 返回 1,除此之外返回 0。你可以假設版本字串非空,並且只包含數字和 字元。字元不代表小數點,而是用於分隔數字序列。例如,2.5 不是 兩個半 ...

比較版本號

比較兩個版本號 version1 和 version2。如果 version1 version2 返回 1,如果 version1 version2 返回 1,除此之外返回 0。你可以假設版本字串非空,並且只包含數字和 字元。字元不代表小數點,而是用於分隔數字序列。例如,2.5 不是 兩個半 也不是...

比較版本號

比較版本號 比較兩個版本號 version1 和 version2。如果 version1 version2 返回1,如果 version1 version2 返回 1,除此之外返回0。你可以假設版本字串非空,並且只包含數字和.字元。字元不代表小數點,而是用於分隔數字序列。例如,2.5不是 兩個半 ...