数据库表通常都会有一个字段类型为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
M1092832.根据已加前缀id获取前缀类型
user
order
message3.还原为原始id
1001
2016102743765214
109283

自定义的前缀常量,可以根据需求自行创建。

源码下载地址:点击查看

php ID前缀格式化类相关推荐

  1. 【Java基础系列教程】第十四章 Java 包装类、日期与日期格式化类、数值格式化等常用类详解

    一.包装类 1.1 什么是包装类 Java中的数据类型分为基本数据类型和引用数据类型,其中基本数据类型是不具有对象特征的,也就是说它们不能像对象一样拥有属性和方法,以及对象化交互.           ...

  2. 趣学python3(1)-f前缀格式化字符串文本

    f前缀格式化字符串文本 print("您叫什么名字") name=input() print(f"{name},很高兴认识你") width = 15 prec ...

  3. CSS - id选择器 和 类选择器

    文章目录 类选择器 一 .类选择器 1. 语法 二 .类选择器 - 多类名 1. 多类名使用方式 三.案例 ID选择器 一.id选择器的使用 1. 语法 2. 注意 二.id选择器和类选择器的区别 类 ...

  4. CSS中id选择器和类选择器的区别

    id选择器和类选择器的区别 (1)类选择器(class)好比人的名字,一个人可以有多个名字,同时一个名字也可以被多个人使用. (2)id选择器好比人的身份证号码,全中国是唯一的,不得重复. (3)id ...

  5. ID选择器和类选择器的合理使用

    一.什么是ID选择器和类选择器 作为CSS选择器的最主要的两大选择器:ID选择器主要指的是通过DOM(Document Object Model)节点的ID选取节点,例如代码 1 <!DOCTY ...

  6. Java常用类(数学相关类 /字符串相关类/时间相关类/格式化类)

    Java类库概述 Java类库文档 https://docs.oracle.com/javase/8/docs/api/ 可以下载文档离线版本(chm格式) https://blog.csdn.net ...

  7. JAVA复习总结(二)---日期时间、格式化类

    Date类 Date d = new Date();//创建表示当前时间的Date对象 Date d2=new Date(System.currentTimeMillis());//同上 Calend ...

  8. 管理多个App ID前缀

    本文说明了团队为何可能具有多个App ID前缀的原因,并讨论了转移到单个App ID前缀的优缺点. 总览 确定您的团队是否具有多个App ID前缀 具有单个App ID前缀的优点 如果您切换App I ...

  9. JAVA日期格式化类

    JAVA日期格式化类 1.日期格式化类 java.text.SimpleDateFormat简单日期格式化 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J3dmn0m ...

最新文章

  1. 教孩子学编程python语言pdf_iOS(iPhone)应用程序开发入门视频教程(35讲)
  2. jqgrid 服务器端验证,jqGrid获取服务服务器返回的所有数据
  3. 将自己可能存放库文件的路径都加入到/etc/ld.so.conf中是明智的选择
  4. git 克隆新的 git 地址项目,用户名或者密码输入错误,再次执行不弹出用户名密码无法修改
  5. html一张图片用两种滤镜,HTML图片CSS滤镜—灰度效果
  6. 操作系统学习笔记-2.1.5线程概念和多线程模型
  7. 【华为云技术分享】解密TaurusDB存储端高并发之线程池
  8. FPGA设计经验总结
  9. 用户、组和权限命令练习
  10. C# 控制台如何播放音频文件
  11. C# excel导入导出,NOPI ,简单例子
  12. 苹果怎么锁定计算机,苹果电脑如何锁定屏幕-mac锁定屏幕教程 - 河东软件园
  13. 5G无线技术基础自学系列 | 5G组网方式
  14. chrome操作系统_Google Chrome操作系统:事实与谬论
  15. 偏微分方程1-常微分方程求解方法回顾
  16. 04. Redis 环境搭建-单实例
  17. 【WMCA】《Biometric Face Presentation Attack Detection with Multi-Channel Convolutional Neural Network》
  18. linux下同时装ananocda2和anaconda3通过修改.bashrc文件进行切换
  19. 这几种常见的伪学习,看下你是不是也中招了?
  20. Docker 容器文件存储驱动 Overlay2

热门文章

  1. Welcome to StackEdit!
  2. 在篮球运动中,领先多少分才安全。体育作家Bill 开发了一个算法,用于判断篮球比赛中怎样的领先优势是不可超越的
  3. Python中的字典到底是有序的吗
  4. js小数 取整 取余
  5. Linux命令 结果输出重定向
  6. 豪掷百万BWB,只为找个好女婿
  7. u盘无法复制过大文件怎么办
  8. The GridView 'GridViewID' fired event PageIndexChanging which wasn't handled.
  9. Edgar校招后端学习--简历技术栈建立过程总结(持续更新)
  10. 仿 trello php,有无开源,类似 Trello 的项目?