| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | <?phpnamespace 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;        }    }}
 |