比较PHP中的两个版本字符串

时间:2012-12-28 09:58:13

标签: php

如何比较版本格式的两个字符串?这样:

version_compare("2.5.1",  "2.5.2") => -1 (smaller)
version_compare("2.5.2",  "2.5.2") =>  0 (equal)
version_compare("2.5.5",  "2.5.2") =>  1 (bigger)
version_compare("2.5.11", "2.5.2") =>  1 (bigger, eleven is bigger than two)

5 个答案:

答案 0 :(得分:35)

使用version_compare函数从PHP交互式提示符开始,内置于PHP 4.1

php > print_r(version_compare("2.5.1",  "2.5.2")); // expect -1
-1
php > print_r(version_compare("2.5.2",  "2.5.2")); // expect 0
0
php > print_r(version_compare("2.5.5",  "2.5.2")); // expect 1
1
php > print_r(version_compare("2.5.11", "2.5.2")); // expect 1
1

似乎PHP已经按预期工作了。如果您遇到不同的行为,也许您应该指定它。

答案 1 :(得分:2)

此外,您可以通过将额外参数传递给version_compare()

来使用PHP内置函数,如下所示
if(version_compare('2.5.2', '2.5.1', '>')) {
 print "First arg is greater than second arg";
}

有关详细信息,请参阅version_compare

答案 2 :(得分:1)

如果你的版本比较不起作用,下面的代码将产生你的结果。

function new_version_compare($s1,$s2){
    $sa1 = explode(".",$s1);
    $sa2 = explode(".",$s2);
    if(($sa2[2]-$sa1[2])<0)
        return 1;
    if(($sa2[2]-$sa1[2])==0)
        return 0;
    if(($sa2[2]-$sa1[2])>0)
        return -1;
}

答案 3 :(得分:0)

我已经开发了此功能。希望对您有所帮助。它可以任意长度。

try {
  // Returns a `Facebook\FacebookResponse` object
  $response = $fb->post(
    '/act_<AD_ACCOUNT_ID>/adcreatives',
    array (
        'name'            => 'Sample Creative',
        'title'           => 'Welcome to the Jungle',
        'body'            => 'We\'ve got fun \'n\' games',
        'image_hash'      => $image->hash,
        'object_url'      => 'http://www.example.com/',
        'object_story_id' => '101xxxxxxxxxxxxx', 
    ),
    '{access-token}'
  );
} catch(Facebook\Exceptions\FacebookResponseException $e) {
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}
$graphNode = $response->getGraphNode();

答案 4 :(得分:-2)

你可以做的是解析每个字符串,在点处停止并将每个数字添加到一个单独的int中。

这样你的字符串2.5.1将成为3个整数:

$ver1 . "." . $ver2 . "." . $ver3

你的字符串2.5.11将成为:

$ver1_2 . "." . $ver2_2 . "." . $ver3_2

然后是一堆if来比较$ ver1和$ ver1_2等等。