全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
让每一名学员高薪就业 PHP二进制位运算实现状态管理在数据库的设计中通常会遇到一个比较麻烦的事情,那就是存储多种可复选状态应当如何设计,比如:商品状态,访问权限,会员状态等信息。有些程序员或DBA会将每一个状态设置一个字段进行存储,但是这样会浪费非常多的存储空间,也会使系统的开发更加复杂。其实,大多数的系统都会使用二进制进行状态位的存储与管理。例如:我们要实现对商品的状态管理,商品的状态分别有:新品、热销、精品、店长推荐。主要有两种实现方法:第一:使用多个字段进行存储的做法,分别为每一个状态设置一个字段进行存储与管理,一共需要4个字段。第二:使用二进制进行状态位控制的做法,设置1个字段进行存储与管理,类型是整型。那么,如何使用二进制实现对状态的管理?首先来回顾一下PHP中的位运算位运算是针对十进制整数在二进制的基础上进行的运算,即需要将十进制数转换成二进制之后才进行按对应的每位上值的运算。在PHP中的位运算符有:&(位与) |(位或) (位非) (异或) (右移) 。由于二进制数只有两个数字,分别是0和1 ,所以通常用于记录状态类数据。不仅可以有效提高执行效率,还能有效节省存储空间。运行原理:1个整型数据占4个字节,1个字节由8个二进制位组成,于是,要表现出十进制的1、2、4、8 分别为:00000000 00000000 00000000 00000001 /十进制数:100000000 00000000 00000000 00000010 /十进制数:200000000 00000000 00000000 00000100 /十进制数:400000000 00000000 00000000 00001000 /十进制数:8我们可以看出,它们分别代表着一个位置上的状态。我们可以将商品的四个状态分别用4个状态位来表示,即:00000000 00000000 00000000 00000001 /表示新品 00000000 00000000 00000000 00000010 /表示热销00000000 00000000 00000000 00000100 /表示精品00000000 00000000 00000000 00001000 /表示店长推荐于是:当管理员选择商品状态为热销时,只需要将十进制数2存入数据库中即可。当管理员选择商品状态为新品时,只需要将十进制数1存入数据库中即可。当管理员选择商品状态为新品和热销时,二进制值为 00000011,转换为十进制数为3,所以只需要将十进制数3存入数据库中即可表示目前商品状态为新品和热销。当管理员选择商品状态同时为新品、热销、精品、店长推荐时,四个状态位都被开启,此时的二进制值为 00001111,即十进制的15。也就是说,数字15即代表了四个商品状态同时开启。接着我们再来看一下如何实现对商品的状态管理。对商品状态进行管理包含了:判断状态,开启状态,关闭状态。但是有一个前提条件是,必须要有一状态位常量作为参考对象,也就是十进制的1、2、4、8、16等各状态位单独表示的数字。判断状态:使用状态位常量和商品状态值进行 位与(&)运算,结果为真则为开启,为假则为关闭。开启状态:使用状态位常量和商品状态值进行 位或(|)运算,将结果重新赋值给商品状态变量。关闭状态:使用状态位常量取反后再和商品状态值进行 与(&)运算,将结果重新赋值给商品状态变量。具体实现代码:(仅做判断是否选中商品状态)HTML文件:商品状态: 新品热销精品店长推荐PHP文件:?php/接收数据$status=array_sum($_POSTstatus);define(S1,1);define(S2,2);define(S3,4);define(S4,8);/使用状态位常量作为判断依据if(S1 & $status)echo 新品:是;elseecho 新品:否;echo ;if(S2 & $status)echo 热销:是;elseecho 热销:否;echo ;if(S3 & $status)echo 精品:是;elseecho 精品:否;echo ;if(S4 & $status)echo 店长推荐:是;elseecho 店长推荐:否;?可见,在 $status 变量中保存了商品的4个选项共8种状态,只需要一个字段即可存储商品的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 畜禽养殖病虫害防治
- 高血压低血钾的鉴别与康复治疗
- 代理产品合同3篇
- 江苏省南通市海安高级中学2024届高三下学期第二次模拟考试语文试题
- 2023年化妆品生产总结报告
- 2023年环卫工作年度考核总结报告
- 冲击试验机相关行业投资方案范本
- 二位五通电磁阀相关行业投资方案
- 三硼酸锂(LBO)晶体相关项目投资计划书
- 人教版二年级数学下册课件《数1000以内的数》
- 最全6w伪原创近义词库、同义词库(含英文)
- 医务室医疗服务合作合同书
- 高考专题复习转换:漫画类转换课件
- 我的家乡沈阳
- 2023年上海市化学高考试卷及答案
- 2023年宁夏职业技术学院单招职业适应性测试题库及答案解析word版
- 【新能源汽车充电方法的研究9500字(论文)】
- 消控室岗位操作规程
- 医院医疗设备质量控制管理经验分享
- 2022-2023学年天津市武清区三年级数学第二学期期末教学质量检测模拟试题含解析
- 有话好好说-班会PPT
评论
0/150
提交评论