[ Index ]
 

Code source de GeekLog 1.4.1

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/system/pear/PHP/Compat/Function/ -> version_compare.php (source)

   1  <?php
   2  // +----------------------------------------------------------------------+

   3  // | PHP Version 4                                                        |

   4  // +----------------------------------------------------------------------+

   5  // | Copyright (c) 1997-2004 The PHP Group                                |

   6  // +----------------------------------------------------------------------+

   7  // | This source file is subject to version 3.0 of the PHP license,       |

   8  // | that is bundled with this package in the file LICENSE, and is        |

   9  // | available at through the world-wide-web at                           |

  10  // | http://www.php.net/license/3_0.txt.                                  |

  11  // | If you did not receive a copy of the PHP license and are unable to   |

  12  // | obtain it through the world-wide-web, please send a note to          |

  13  // | license@php.net so we can mail you a copy immediately.               |

  14  // +----------------------------------------------------------------------+

  15  // | Authors: Philippe Jausions <Philippe.Jausions@11abacus.com>          |

  16  // |          Aidan Lister <aidan@php.net>                                |

  17  // +----------------------------------------------------------------------+

  18  //

  19  // $Id: version_compare.php,v 1.13 2005/08/01 12:21:14 aidan Exp $

  20  
  21  
  22  /**

  23   * Replace version_compare()

  24   *

  25   * @category    PHP

  26   * @package     PHP_Compat

  27   * @link        http://php.net/function.version_compare

  28   * @author      Philippe Jausions <Philippe.Jausions@11abacus.com>

  29   * @author      Aidan Lister <aidan@php.net>

  30   * @version     $Revision: 1.13 $

  31   * @since       PHP 4.1.0

  32   * @require     PHP 4.0.5 (user_error)

  33   */
  34  if (!function_exists('version_compare')) {
  35      function version_compare($version1, $version2, $operator = '<')
  36      {
  37          // Check input

  38          if (!is_scalar($version1)) {
  39              user_error('version_compare() expects parameter 1 to be string, ' .
  40                  gettype($version1) . ' given', E_USER_WARNING);
  41              return;
  42          }
  43  
  44          if (!is_scalar($version2)) {
  45              user_error('version_compare() expects parameter 2 to be string, ' .
  46                  gettype($version2) . ' given', E_USER_WARNING);
  47              return;
  48          }
  49  
  50          if (!is_scalar($operator)) {
  51              user_error('version_compare() expects parameter 3 to be string, ' .
  52                  gettype($operator) . ' given', E_USER_WARNING);
  53              return;
  54          }
  55  
  56          // Standardise versions

  57          $v1 = explode('.',
  58              str_replace('..', '.',
  59                  preg_replace('/([^0-9\.]+)/', '.$1.',
  60                      str_replace(array('-', '_', '+'), '.',
  61                          trim($version1)))));
  62  
  63          $v2 = explode('.',
  64              str_replace('..', '.',
  65                  preg_replace('/([^0-9\.]+)/', '.$1.',
  66                      str_replace(array('-', '_', '+'), '.',
  67                          trim($version2)))));
  68  
  69          // Replace empty entries at the start of the array

  70          while (empty($v1[0]) && array_shift($v1)) {}
  71          while (empty($v2[0]) && array_shift($v2)) {}
  72  
  73          // Release state order

  74          // '#' stands for any number

  75          $versions = array(
  76              'dev'   => 0,
  77              'alpha' => 1,
  78              'a'     => 1,
  79              'beta'  => 2,
  80              'b'     => 2,
  81              'RC'    => 3,
  82              '#'     => 4,
  83              'p'     => 5,
  84              'pl'    => 5);
  85  
  86          // Loop through each segment in the version string

  87          $compare = 0;
  88          for ($i = 0, $x = min(count($v1), count($v2)); $i < $x; $i++) {
  89              if ($v1[$i] == $v2[$i]) {
  90                  continue;
  91              }
  92              $i1 = $v1[$i];
  93              $i2 = $v2[$i];
  94              if (is_numeric($i1) && is_numeric($i2)) {
  95                  $compare = ($i1 < $i2) ? -1 : 1;
  96                  break;
  97              }
  98  
  99              // We use the position of '#' in the versions list

 100              // for numbers... (so take care of # in original string)

 101              if ($i1 == '#') {
 102                  $i1 = '';
 103              } elseif (is_numeric($i1)) {
 104                  $i1 = '#';
 105              }
 106  
 107              if ($i2 == '#') {
 108                  $i2 = '';
 109              } elseif (is_numeric($i2)) {
 110                  $i2 = '#';
 111              }
 112  
 113              if (isset($versions[$i1]) && isset($versions[$i2])) {
 114                  $compare = ($versions[$i1] < $versions[$i2]) ? -1 : 1;
 115              } elseif (isset($versions[$i1])) {
 116                  $compare = 1;
 117              } elseif (isset($versions[$i2])) {
 118                  $compare = -1;
 119              } else {
 120                  $compare = 0;
 121              }
 122  
 123              break;
 124          }
 125  
 126          // If previous loop didn't find anything, compare the "extra" segments

 127          if ($compare == 0) {
 128              if (count($v2) > count($v1)) {
 129                  if (isset($versions[$v2[$i]])) {
 130                      $compare = ($versions[$v2[$i]] < 4) ? 1 : -1;
 131                  } else {
 132                      $compare = -1;
 133                  }
 134              } elseif (count($v2) < count($v1)) {
 135                  if (isset($versions[$v1[$i]])) {
 136                      $compare = ($versions[$v1[$i]] < 4) ? -1 : 1;
 137                  } else {
 138                      $compare = 1;
 139                  }
 140              }
 141          }
 142  
 143          // Compare the versions

 144          if (func_num_args() > 2) {
 145              switch ($operator) {
 146                  case '>':
 147                  case 'gt':
 148                      return (bool) ($compare > 0);
 149                      break;
 150                  case '>=':
 151                  case 'ge':
 152                      return (bool) ($compare >= 0);
 153                      break;
 154                  case '<=':
 155                  case 'le':
 156                      return (bool) ($compare <= 0);
 157                      break;
 158                  case '==':
 159                  case '=':
 160                  case 'eq':
 161                      return (bool) ($compare == 0);
 162                      break;
 163                  case '<>':
 164                  case '!=':
 165                  case 'ne':
 166                      return (bool) ($compare != 0);
 167                      break;
 168                  case '':
 169                  case '<':
 170                  case 'lt':
 171                      return (bool) ($compare < 0);
 172                      break;
 173                  default:
 174                      return;
 175              }
 176          }
 177  
 178          return $compare;
 179      }
 180  }
 181  
 182  ?>


Généré le : Wed Nov 21 12:27:40 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics