|
- <?php
-
- namespace fast;
-
- /**
- * 版本检测和对比
- */
- class Version
- {
-
- /**
- * 检测版本是否的版本要求的数据中
- *
- * @param string $version
- * @param array $data
- * @return bool
- */
- public static function check($version, $data = [])
- {
- //版本号以.分隔
- $data = is_array($data) ? $data : [$data];
- if ($data) {
- if (in_array("*", $data) || in_array($version, $data)) {
- return true;
- }
- $ver = explode('.', $version);
- if ($ver) {
- $versize = count($ver);
- //验证允许的版本
- foreach ($data as $m) {
- $c = explode('.', $m);
- if (!$c || $versize != count($c)) {
- continue;
- }
- $i = 0;
- foreach ($c as $a => $k) {
- if (!self::compare($ver[$a], $k)) {
- continue 2;
- } else {
- $i++;
- }
- }
- if ($i == $versize) {
- return true;
- }
- }
- }
- }
- return false;
- }
-
- /**
- * 比较两个版本号
- *
- * @param string $v1
- * @param string $v2
- * @return boolean
- */
- public static function compare($v1, $v2)
- {
- if ($v2 == "*" || $v1 == $v2) {
- return true;
- } else {
- $values = [];
- $k = explode(',', $v2);
- foreach ($k as $v) {
- if (strpos($v, '-') !== false) {
- list($start, $stop) = explode('-', $v);
- for ($i = $start; $i <= $stop; $i++) {
- $values[] = $i;
- }
- } else {
- $values[] = $v;
- }
- }
- return in_array($v1, $values) ? true : false;
- }
- }
- }
|