php ID前缀格式化类
数据库表通常都会有一个字段类型为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前缀格式化类相关推荐
- 【Java基础系列教程】第十四章 Java 包装类、日期与日期格式化类、数值格式化等常用类详解
一.包装类 1.1 什么是包装类 Java中的数据类型分为基本数据类型和引用数据类型,其中基本数据类型是不具有对象特征的,也就是说它们不能像对象一样拥有属性和方法,以及对象化交互. ...
- 趣学python3(1)-f前缀格式化字符串文本
f前缀格式化字符串文本 print("您叫什么名字") name=input() print(f"{name},很高兴认识你") width = 15 prec ...
- CSS - id选择器 和 类选择器
文章目录 类选择器 一 .类选择器 1. 语法 二 .类选择器 - 多类名 1. 多类名使用方式 三.案例 ID选择器 一.id选择器的使用 1. 语法 2. 注意 二.id选择器和类选择器的区别 类 ...
- CSS中id选择器和类选择器的区别
id选择器和类选择器的区别 (1)类选择器(class)好比人的名字,一个人可以有多个名字,同时一个名字也可以被多个人使用. (2)id选择器好比人的身份证号码,全中国是唯一的,不得重复. (3)id ...
- ID选择器和类选择器的合理使用
一.什么是ID选择器和类选择器 作为CSS选择器的最主要的两大选择器:ID选择器主要指的是通过DOM(Document Object Model)节点的ID选取节点,例如代码 1 <!DOCTY ...
- Java常用类(数学相关类 /字符串相关类/时间相关类/格式化类)
Java类库概述 Java类库文档 https://docs.oracle.com/javase/8/docs/api/ 可以下载文档离线版本(chm格式) https://blog.csdn.net ...
- JAVA复习总结(二)---日期时间、格式化类
Date类 Date d = new Date();//创建表示当前时间的Date对象 Date d2=new Date(System.currentTimeMillis());//同上 Calend ...
- 管理多个App ID前缀
本文说明了团队为何可能具有多个App ID前缀的原因,并讨论了转移到单个App ID前缀的优缺点. 总览 确定您的团队是否具有多个App ID前缀 具有单个App ID前缀的优点 如果您切换App I ...
- JAVA日期格式化类
JAVA日期格式化类 1.日期格式化类 java.text.SimpleDateFormat简单日期格式化 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J3dmn0m ...
最新文章
- 教孩子学编程python语言pdf_iOS(iPhone)应用程序开发入门视频教程(35讲)
- jqgrid 服务器端验证,jqGrid获取服务服务器返回的所有数据
- 将自己可能存放库文件的路径都加入到/etc/ld.so.conf中是明智的选择
- git 克隆新的 git 地址项目,用户名或者密码输入错误,再次执行不弹出用户名密码无法修改
- html一张图片用两种滤镜,HTML图片CSS滤镜—灰度效果
- 操作系统学习笔记-2.1.5线程概念和多线程模型
- 【华为云技术分享】解密TaurusDB存储端高并发之线程池
- FPGA设计经验总结
- 用户、组和权限命令练习
- C# 控制台如何播放音频文件
- C# excel导入导出,NOPI ,简单例子
- 苹果怎么锁定计算机,苹果电脑如何锁定屏幕-mac锁定屏幕教程 - 河东软件园
- 5G无线技术基础自学系列 | 5G组网方式
- chrome操作系统_Google Chrome操作系统:事实与谬论
- 偏微分方程1-常微分方程求解方法回顾
- 04. Redis 环境搭建-单实例
- 【WMCA】《Biometric Face Presentation Attack Detection with Multi-Channel Convolutional Neural Network》
- linux下同时装ananocda2和anaconda3通过修改.bashrc文件进行切换
- 这几种常见的伪学习,看下你是不是也中招了?
- Docker 容器文件存储驱动 Overlay2
热门文章
- Welcome to StackEdit!
- 在篮球运动中,领先多少分才安全。体育作家Bill 开发了一个算法,用于判断篮球比赛中怎样的领先优势是不可超越的
- Python中的字典到底是有序的吗
- js小数 取整 取余
- Linux命令 结果输出重定向
- 豪掷百万BWB,只为找个好女婿
- u盘无法复制过大文件怎么办
- The GridView 'GridViewID' fired event PageIndexChanging which wasn't handled.
- Edgar校招后端学习--简历技术栈建立过程总结(持续更新)
- 仿 trello php,有无开源,类似 Trello 的项目?