home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / php / PEAR / PHP / Compat / Function / version_compare.php < prev    next >
Encoding:
PHP Script  |  2008-07-02  |  6.3 KB  |  182 lines

  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. ?>