Home > Backend Development > PHP Tutorial > php ID prefix formatting class

php ID prefix formatting class

黄舟
Release: 2023-03-05 19:20:01
Original
1561 people have browsed it


Database tables usually have an auto-incrementing primary key with a field type of int and named id.

Advantages: Using int type can auto-increment and saves storage space than character type.
Disadvantages: id is a numeric type. When you want to query the data corresponding to an id, it is difficult to determine which data table it is based on the id.

Therefore, we should use int when storing, and perform some processing on the ID when displaying, so that it is easy to tell which table the ID belongs to.


Written the following class to add prefixes to ids and restore prefixed ids.

Prefix.class.php

<?php/**
 * ID前缀格式化类
 * Date:    2016-10-27
 * Author:  fdipzone
 * Ver:     1.0
 *
 * Func
 * public getPrefixId    生成已加前缀的id
 * public getId          还原为id
 * public getPrefixType  根据已加前缀id获取前缀类型
 */class Prefix{ // class start

    // 定义前缀常量
    const USER_TYPE = &#39;user&#39;;       // 用户
    const ORDER_TYPE = &#39;order&#39;;     // 订单
    const MESSAGE_TYPE = &#39;message&#39;; // 消息

    // 前缀设定
    private static $prefix = array(        
    self::USER_TYPE => &#39;U&#39;,        
    self::ORDER_TYPE => &#39;O&#39;,        
    self::MESSAGE_TYPE => &#39;M&#39;
    );    
    /**
     * 创建带前缀的id
     * @param  Int     $id          id
     * @param  Int     $prefix_type 类型
     * @return String
     */
    public static function getPrefixId($id, $prefix_type=&#39;&#39;){
        // 有自定义前缀类型
        if(isset(self::$prefix[$prefix_type])){            
        return self::$prefix[$prefix_type].$id;
        }        
        // 没有自定义前缀类型
        return $id;
    }    
    /**
     * 还原为id
     * @param  String $prefix_id 已加前缀id 
     * @return Int
     */
    public static function getId($prefix_id){
        preg_match(&#39;/\d+/&#39;, $prefix_id, $arr);        
        if(isset($arr[0])){            
        return $arr[0];
        }        
        return 0;
    }    
    /**
     * 根据已加前缀id获取前缀类型
     * @param  String $prefix_id 已加前缀id 
     * @return Int
     */
    public static function getPrefixType($prefix_id){

        // 获取id前缀
        preg_match(&#39;/[A-Za-z]+/&#39;, $prefix_id, $arr);        
        if(isset($arr[0])){            
        $prefix = $arr[0];            
        // 获取前缀
            $prefixs = array_flip(self::$prefix);            
            if(isset($prefixs[$prefix])){                
            return $prefixs[$prefix];
            }
        }        
        return &#39;&#39;;
    }

} // class end?>
Copy after login
Copy after login

demo.php

<?phprequire &#39;Prefix.class.php&#39;;
// 原始id$user_id = 1001;
$order_id = 2016102743765214;
$message_id = 109283;echo &#39;<pre class="brush:php;toolbar:false">&#39;;
// 已加前缀idecho &#39;1.id加前缀&#39;.PHP_EOL;
$prefix_user_id = Prefix::getPrefixId($user_id, Prefix::USER_TYPE);
$prefix_order_id = Prefix::getPrefixId($order_id, Prefix::ORDER_TYPE);
$prefix_message_id = Prefix::getPRefixId($message_id, Prefix::MESSAGE_TYPE);
echo $prefix_user_id.PHP_EOL;
echo $prefix_order_id.PHP_EOL;
echo $prefix_message_id.PHP_EOL.PHP_EOL;
// 前缀类型echo &#39;2.根据已加前缀id获取前缀类型&#39;.PHP_EOL;
echo Prefix::getPrefixType($prefix_user_id).PHP_EOL;
echo Prefix::getPrefixType($prefix_order_id).PHP_EOL;
echo Prefix::getPrefixType($prefix_message_id).PHP_EOL.PHP_EOL;
// 还原为原始idecho &#39;3.还原为原始id&#39;.PHP_EOL;
echo Prefix::getId($prefix_user_id).PHP_EOL;
echo Prefix::getId($prefix_order_id).PHP_EOL;
echo Prefix::getId($prefix_message_id).PHP_EOL.PHP_EOL;
echo &#39;
';?>
Copy after login

Output:

1.id加前缀
U1001
O2016102743765214
M1092832.根据已加前缀id获取前缀类型
user
order
message3.还原为原始id10012016102743765214109283
Copy after login
Copy after login

Customized prefix constants can be created according to needs.


Source code download address: Click to view

Database tables usually have a field type of int and an auto-increment named id Primary key.

Advantages: Using int type can auto-increment and saves storage space than character type.
Disadvantages: id is a numeric type. When you want to query the data corresponding to an id, it is difficult to determine which data table it is based on the id.

Therefore, we should use int when storing, and perform some processing on the ID when displaying, so that it is easy to tell which table the ID belongs to.


Written the following class to add prefixes to ids and restore prefixed ids.

Prefix.class.php

<?php/**
 * ID前缀格式化类
 * Date:    2016-10-27
 * Author:  fdipzone
 * Ver:     1.0
 *
 * Func
 * public getPrefixId    生成已加前缀的id
 * public getId          还原为id
 * public getPrefixType  根据已加前缀id获取前缀类型
 */class Prefix{ // class start

    // 定义前缀常量
    const USER_TYPE = &#39;user&#39;;       // 用户
    const ORDER_TYPE = &#39;order&#39;;     // 订单
    const MESSAGE_TYPE = &#39;message&#39;; // 消息

    // 前缀设定
    private static $prefix = array(        
    self::USER_TYPE => &#39;U&#39;,        
    self::ORDER_TYPE => &#39;O&#39;,        
    self::MESSAGE_TYPE => &#39;M&#39;
    );    
    /**
     * 创建带前缀的id
     * @param  Int     $id          id
     * @param  Int     $prefix_type 类型
     * @return String
     */
    public static function getPrefixId($id, $prefix_type=&#39;&#39;){
        // 有自定义前缀类型
        if(isset(self::$prefix[$prefix_type])){            
        return self::$prefix[$prefix_type].$id;
        }        
        // 没有自定义前缀类型
        return $id;
    }    
    /**
     * 还原为id
     * @param  String $prefix_id 已加前缀id 
     * @return Int
     */
    public static function getId($prefix_id){
        preg_match(&#39;/\d+/&#39;, $prefix_id, $arr);        
        if(isset($arr[0])){            
        return $arr[0];
        }        
        return 0;
    }    
    /**
     * 根据已加前缀id获取前缀类型
     * @param  String $prefix_id 已加前缀id 
     * @return Int
     */
    public static function getPrefixType($prefix_id){

        // 获取id前缀
        preg_match(&#39;/[A-Za-z]+/&#39;, $prefix_id, $arr);        
        if(isset($arr[0])){            
        $prefix = $arr[0];            
        // 获取前缀
            $prefixs = array_flip(self::$prefix);            
            if(isset($prefixs[$prefix])){                
            return $prefixs[$prefix];
            }
        }        
        return &#39;&#39;;
    }

} // class end?>
Copy after login
Copy after login

demo.php

<?phprequire &#39;Prefix.class.php&#39;;
// 原始id$user_id = 1001;
$order_id = 2016102743765214;
$message_id = 109283;
echo &#39;<pre class="brush:php;toolbar:false">&#39;;
// 已加前缀idecho &#39;1.id加前缀&#39;.PHP_EOL;
$prefix_user_id = Prefix::getPrefixId($user_id, Prefix::USER_TYPE);
$prefix_order_id = Prefix::getPrefixId($order_id, Prefix::ORDER_TYPE);
$prefix_message_id = Prefix::getPRefixId($message_id, Prefix::MESSAGE_TYPE);
echo $prefix_user_id.PHP_EOL;
echo $prefix_order_id.PHP_EOL;
echo $prefix_message_id.PHP_EOL.PHP_EOL;
// 前缀类型echo &#39;2.根据已加前缀id获取前缀类型&#39;.PHP_EOL;
echo Prefix::getPrefixType($prefix_user_id).PHP_EOL;
echo Prefix::getPrefixType($prefix_order_id).PHP_EOL;
echo Prefix::getPrefixType($prefix_message_id).PHP_EOL.PHP_EOL;
// 还原为原始idecho &#39;3.还原为原始id&#39;.PHP_EOL;
echo Prefix::getId($prefix_user_id).PHP_EOL;
echo Prefix::getId($prefix_order_id).PHP_EOL;
echo Prefix::getId($prefix_message_id).PHP_EOL.PHP_EOL;
echo &#39;
';?>
Copy after login

Output:

1.id加前缀
U1001
O2016102743765214
M1092832.根据已加前缀id获取前缀类型
user
order
message3.还原为原始id10012016102743765214109283
Copy after login
Copy after login

Customized prefix constants can be created according to needs.


The above is the content of PHP ID prefix formatting. For more related content, please pay attention to the PHP Chinese website (www. php.cn)!


Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template