PHP-Versionsverarbeitungsklasse

WBOY
Freigeben: 2016-08-08 09:21:44
Original
922 Leute haben es durchsucht

php-Versionsverarbeitungsklasse

Wenn Sie beispielsweise die App-Version oder einige Versionsdaten aufzeichnen und das 1.0.0-Versionsformat verwenden, um sie in der Datenbank aufzuzeichnen, sind es mehr problematisch, wenn Sie die Abfrage filtern müssen.
Das Konvertieren von Versionszeichenfolgen in Zahlen kann den Vergleich und das Filtern zwischen Versionen erleichtern.

Zum Beispiel: Wenn Sie die Version zwischen 3.0.1 und 10.0.1 abfragen möchten, muss diese verarbeitet werden, bevor Sie eine Abfrage durchführen können, da 3.0.1 größer als 10.0.1 ist (String-Vergleich).
Es ist sehr praktisch, 3.0.1 und 10.0.1 zum Vergleich und zur Abfrage in die Zahlen 30001 und 100001 umzuwandeln.

Version.class.php

<code><span><span><?php</span><span>/**
 * 版本处理类,提供版本与数字互相转换,方便入库后进行比较筛选
 *  Date:       2015-06-30
 *  Author:     fdipzone
 *  ver:        1.0
 *
 *  Func:
 *  public  version_to_integer  将版本转为数字
 *  public  integer_to_version  将数字转为版本
 *  public  check               检查版本格式是否正确
 *  public  compare             比较两个版本的值
 */</span><span><span>class</span><span>Version</span>{</span><span>// class start</span><span>/**
     * 将版本转为数字
     *<span> @param</span>  String $version 版本
     *<span> @return</span> Int
     */</span><span>public</span><span><span>function</span><span>version_to_integer</span><span>(<span>$version</span>)</span>{</span><span>if</span>(<span>$this</span>->check(<span>$version</span>)){
            <span>list</span>(<span>$major</span>, <span>$minor</span>, <span>$sub</span>) = explode(<span>'.'</span>, <span>$version</span>);
            <span>$integer_version</span> = <span>$major</span>*<span>10000</span> + <span>$minor</span>*<span>100</span> + <span>$sub</span>;
            <span>return</span> intval(<span>$integer_version</span>);
        }<span>else</span>{
            <span>throw</span><span>new</span> ErrorException(<span>'version Validate Error'</span>);
        }
    }

    <span>/**
     * 将数字转为版本
     *<span> @param</span>  Int     $version_code 版本的数字表示
     *<span> @return</span> String
     */</span><span>public</span><span><span>function</span><span>integer_to_version</span><span>(<span>$version_code</span>)</span>{</span><span>if</span>(is_numeric(<span>$version_code</span>) && <span>$version_code</span>>=<span>10000</span>){
            <span>$version</span> = <span>array</span>();
            <span>$version</span>[<span>0</span>] = (int)(<span>$version_code</span>/<span>10000</span>);
            <span>$version</span>[<span>1</span>] = (int)(<span>$version_code</span>%<span>10000</span>/<span>100</span>);
            <span>$version</span>[<span>2</span>] = <span>$version_code</span>%<span>100</span>;
            <span>return</span> implode(<span>'.'</span>, <span>$version</span>);
        }<span>else</span>{
            <span>throw</span><span>new</span> ErrorException(<span>'version code Validate Error'</span>);
        }
    }

    <span>/**
     * 检查版本格式是否正确
     *<span> @param</span>  String  $version 版本
     *<span> @return</span> Boolean
     */</span><span>public</span><span><span>function</span><span>check</span><span>(<span>$version</span>)</span>{</span><span>$ret</span> = preg_match(<span>'/^[0-9]{1,3}\.[0-9]{1,2}\.[0-9]{1,2}$/'</span>, <span>$version</span>);
        <span>return</span><span>$ret</span>? <span>true</span> : <span>false</span>;
    }

    <span>/**
     * 比较两个版本的值
     *<span> @param</span>  String  $version1  版本1
     *<span> @param</span>  String  $version2  版本2
     *<span> @return</span> Int                -1:1<2, 0:相等, 1:1>2
     */</span><span>public</span><span><span>function</span><span>compare</span><span>(<span>$version1</span>, <span>$version2</span>)</span>{</span><span>if</span>(<span>$this</span>->check(<span>$version1</span>) && <span>$this</span>->check(<span>$version2</span>)){
            <span>$version1_code</span> = <span>$this</span>->version_to_integer(<span>$version1</span>);
            <span>$version2_code</span> = <span>$this</span>->version_to_integer(<span>$version2</span>);

            <span>if</span>(<span>$version1_code</span>><span>$version2_code</span>){
                <span>return</span><span>1</span>;
            }<span>elseif</span>(<span>$version1_code</span><<span>$version2_code</span>){
                <span>return</span> -<span>1</span>;
            }<span>else</span>{
                <span>return</span><span>0</span>;
            }
        }<span>else</span>{
            <span>throw</span><span>new</span> ErrorException(<span>'version1 or version2 Validate Error'</span>);
        }
    }

} <span>// class end</span><span>?></span></span></code>
Nach dem Login kopieren

demo.php

<code><span><?php</span><span>require</span><span>'Version.class.php'</span>;

<span>$version</span> = <span>'2.7.1'</span>;

<span>$obj</span> = <span>new</span> Version();

<span>// 版本转数字</span><span>$version_code</span> = <span>$obj</span>->version_to_integer(<span>$version</span>);
<span>echo</span><span>$version_code</span>.<span>'<br>'</span>;  <span>// 20701</span><span>// 数字转版本</span><span>$version</span> = <span>$obj</span>->integer_to_version(<span>$version_code</span>);
<span>echo</span><span>$version</span>.<span>'<br>'</span>; <span>// 2.7.1</span><span>// 检查版本</span><span>$version</span> = <span>'1.1.a'</span>;
var_dump(<span>$obj</span>->check(<span>$version</span>)); <span>// false</span><span>// 比较两个版本</span><span>$version1</span> = <span>'2.9.9'</span>;
<span>$version2</span> = <span>'10.0.1'</span>;

<span>$result</span> = <span>$obj</span>->compare(<span>$version1</span>, <span>$version2</span>);
<span>echo</span><span>$result</span>; <span>// -1</span><span>?></span></span></code>
Nach dem Login kopieren

Quellcode-Download Adresse: Zum Anzeigen klicken

Copyright-Erklärung: Dieser Artikel ist ein Originalartikel des Bloggers und darf nicht ohne die Erlaubnis des Bloggers reproduziert werden.

Das Obige stellt die Verarbeitungsklasse der PHP-Version vor, einschließlich einiger Aspekte des Inhalts. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage