數據庫表通常都會有一個字段類型為int,命名為id的自增主鍵。
優點:使用int類型可自增,且比字符類型節省存儲空間。 缺點:id是數值型,當要查詢一個id對應的數據時,很難根據id判斷是哪一個數據表。
因此我們在存儲時,應使用int,而在顯示時對id進行一些處理,使很容易分辨這個id屬於哪一個表。 編寫了下面這個類,實現對id增加前綴及對已加前綴的id還原。
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 = 'user'; // 用戶
const ORDER_TYPE = 'order'; // 訂單
const MESSAGE_TYPE = 'message'; // 消息
// 前綴設定
private static $prefix = array(
self::USER_TYPE => 'U',
self::ORDER_TYPE => 'O',
self::MESSAGE_TYPE => 'M'
);
/**
* 創建帶前綴的id
* @param Int $id id
* @param Int $prefix_type 類型
* @return String
*/
public static function getPrefixId($id, $prefix_type=''){
// 有自定義前綴類型
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('/d+/', $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('/[A-Za-z]+/', $prefix_id, $arr);
if(isset($arr[0])){
$prefix = $arr[0];
// 獲取前綴
$prefixs = array_flip(self::$prefix);
if(isset($prefixs[$prefix])){
return $prefixs[$prefix];
}
}
return '';
}
} // class end
?>
demo.php<?php
require 'Prefix.class.php';
// 原始id
$user_id = 1001;
$order_id = 2016102743765214;
$message_id = 109283;
echo '<pre>';
// 已加前綴id
echo '1.id加前綴'.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 '2.根據已加前綴id獲取前綴類型'.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;
// 還原為原始id
echo '3.還原為原始id'.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 '</pre>';
?>
輸出:1.id加前綴
U1001
O2016102743765214
M109283
2.根據已加前綴id獲取前綴類型
user
order
message
3.還原為原始id
1001
2016102743765214
109283
自定義的前綴常量,可以根據需求自行創建。
源碼下載地址:點擊查看