Cheetah
version_compare.php
Go to the documentation of this file.
1 <?php
2 
8 // +----------------------------------------------------------------------+
9 // | PHP Version 4 |
10 // +----------------------------------------------------------------------+
11 // | Copyright (c) 1997-2004 The PHP Group |
12 // +----------------------------------------------------------------------+
13 // | This source file is subject to version 3.0 of the PHP license, |
14 // | that is bundled with this package in the file LICENSE, and is |
15 // | available at through the world-wide-web at |
16 // | http://www.php.net/license/3_0.txt. |
17 // | If you did not receive a copy of the PHP license and are unable to |
18 // | obtain it through the world-wide-web, please send a note to |
19 // | license@php.net so we can mail you a copy immediately. |
20 // +----------------------------------------------------------------------+
21 // | Authors: Philippe Jausions <Philippe.Jausions@11abacus.com> |
22 // | Aidan Lister <aidan@php.net> |
23 // +----------------------------------------------------------------------+
24 //
25 // $Id: version_compare.php,v 1.1 2005/07/11 16:34:36 ggiunta Exp $
26 
27 
40 if (!function_exists('version_compare')) {
41  function version_compare($version1, $version2, $operator = '<')
42  {
43  // Check input
44  if (!is_scalar($version1)) {
45  user_error('version_compare() expects parameter 1 to be string, ' .
46  gettype($version1) . ' given', E_USER_WARNING);
47  return;
48  }
49 
50  if (!is_scalar($version2)) {
51  user_error('version_compare() expects parameter 2 to be string, ' .
52  gettype($version2) . ' given', E_USER_WARNING);
53  return;
54  }
55 
56  if (!is_scalar($operator)) {
57  user_error('version_compare() expects parameter 3 to be string, ' .
58  gettype($operator) . ' given', E_USER_WARNING);
59  return;
60  }
61 
62  // Standardise versions
63  $v1 = explode('.',
64  str_replace('..', '.',
65  preg_replace('/([^0-9\.]+)/', '.$1.',
66  str_replace(array('-', '_', '+'), '.',
67  trim($version1)))));
68 
69  $v2 = explode('.',
70  str_replace('..', '.',
71  preg_replace('/([^0-9\.]+)/', '.$1.',
72  str_replace(array('-', '_', '+'), '.',
73  trim($version2)))));
74 
75  // Replace empty entries at the start of the array
76  while (empty($v1[0]) && array_shift($v1)) {}
77  while (empty($v2[0]) && array_shift($v2)) {}
78 
79  // Release state order
80  // '#' stands for any number
81  $versions = array(
82  'dev' => 0,
83  'alpha' => 1,
84  'a' => 1,
85  'beta' => 2,
86  'b' => 2,
87  'RC' => 3,
88  '#' => 4,
89  'p' => 5,
90  'pl' => 5);
91 
92  // Loop through each segment in the version string
93  $compare = 0;
94  for ($i = 0, $x = min(count($v1), count($v2)); $i < $x; $i++) {
95  if ($v1[$i] == $v2[$i]) {
96  continue;
97  }
98  $i1 = $v1[$i];
99  $i2 = $v2[$i];
100  if (is_numeric($i1) && is_numeric($i2)) {
101  $compare = ($i1 < $i2) ? -1 : 1;
102  break;
103  }
104  // We use the position of '#' in the versions list
105  // for numbers... (so take care of # in original string)
106  if ($i1 == '#') {
107  $i1 = '';
108  } elseif (is_numeric($i1)) {
109  $i1 = '#';
110  }
111  if ($i2 == '#') {
112  $i2 = '';
113  } elseif (is_numeric($i2)) {
114  $i2 = '#';
115  }
116  if (isset($versions[$i1]) && isset($versions[$i2])) {
117  $compare = ($versions[$i1] < $versions[$i2]) ? -1 : 1;
118  } elseif (isset($versions[$i1])) {
119  $compare = 1;
120  } elseif (isset($versions[$i2])) {
121  $compare = -1;
122  } else {
123  $compare = 0;
124  }
125 
126  break;
127  }
128 
129  // If previous loop didn't find anything, compare the "extra" segments
130  if ($compare == 0) {
131  if (count($v2) > count($v1)) {
132  if (isset($versions[$v2[$i]])) {
133  $compare = ($versions[$v2[$i]] < 4) ? 1 : -1;
134  } else {
135  $compare = -1;
136  }
137  } elseif (count($v2) < count($v1)) {
138  if (isset($versions[$v1[$i]])) {
139  $compare = ($versions[$v1[$i]] < 4) ? -1 : 1;
140  } else {
141  $compare = 1;
142  }
143  }
144  }
145 
146  // Compare the versions
147  if (func_num_args() > 2) {
148  switch ($operator) {
149  case '>':
150  case 'gt':
151  return (bool) ($compare > 0);
152  break;
153  case '>=':
154  case 'ge':
155  return (bool) ($compare >= 0);
156  break;
157  case '<=':
158  case 'le':
159  return (bool) ($compare <= 0);
160  break;
161  case '==':
162  case '=':
163  case 'eq':
164  return (bool) ($compare == 0);
165  break;
166  case '<>':
167  case '!=':
168  case 'ne':
169  return (bool) ($compare != 0);
170  break;
171  case '':
172  case '<':
173  case 'lt':
174  return (bool) ($compare < 0);
175  break;
176  default:
177  return;
178  }
179  }
180 
181  return $compare;
182  }
183 }
184 
185 ?>
php
empty
Attr AllowedRel this is empty
Definition: Attr.AllowedRel.txt:7