資料庫表通常都會有一個欄位類型為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
<?phprequire 'Prefix.class.php';// 原始id$user_id = 1001;$order_id = 2016102743765214;$message_id = 109283;echo '<pre>';// 已加首碼idecho '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;// 還原為原始idecho '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加首碼U1001O2016102743765214M1092832.根據已加首碼id擷取首碼類型userordermessage3.還原為原始id10012016102743765214109283
自訂的首碼常量,可以根據需求自行建立。
本文講解了如何通過php 進行ID首碼格式化類,更多相關內容請關注php中文網。
相關推薦:
如何通過php 將print_r處理後的資料還原為原始數組的方法
通過php中的PDO判斷串連是否可用的方法
通過php 判斷頁面或圖片是否經過gzip壓縮