php位存储,按位存储的概念及实例

毕业季,浪了好久。。。过了这个六月,就正式踏入社会啦。。。总感觉还没准备好。。。。。。。。。。 特大转折。。。记录一下最近的一些知识。。。

按位存储的概念

在数据库存储中,可以使用一种类二进制字符串来保存多个值,当这个二进制值是由0和1组成的时候,就可以按照从右到左,每个位按照2^n计算值相加进而换算成为一个十进制数,从而实现一个十进制值保存多种情况的目的。

举个栗子

现在3种不同的css样式,可以应用于不同的一些地方,如app、pc、小程序等。

按值存储的话,分别用1-3代表3种样式(styleType),分别用1-3代表支持类型app、pc、小程序(supportType),然后存储的时候应该是按这种方式:

styleTypesupportType

11,3

21,2,3

31

......

显然,这样的话,supportType这个字段就要存储多个styleType代表值。

那么,按位存储是怎样的呢。用3位的类二进制字符串来表示,从左到右每一位分别对应样式1-3,1代表支持该样式,0代表不支持该样式。如要代表支持样式1,3的话,就用101来表示,第一、三位为1,其他位置0.那我们存储的时候,是不是就存储这么一个3位的字符串呢。并不是,要存储的是转换后的一个十进制的数值。因为每一个位按照2^n转换之后相加得到的十进制必然可以反解,这样就可以知道这个值代表的是哪些样式了。

按位存储的话,应该是这样存的:

styleTypesupportType

15

27

31

......

实际应用

①场景一,在app环境中,过滤样式,即只把支持app的样式过滤出来显示。

应用原理:数值相与,只有1与1结果为1。

也就是说,我们如果要过滤出支持app的样式,也就是过滤styleType中第一位为1时对应的样式,即1**,也就是十进制数值中包含4这个数的。

js中,十进制数可以直接相与,所以遍历过滤时代码可以直接这样判断:

(item.supportType & 4 == 4)?'对应的styleType支持':'对应的styleType不支持' //注意,==优先级比&大,所以要加括号

②场景二,修改supportType

因为保存到数据库中的是一个十进制的数组,所以才修改对应关系的时候,必须知道改的是哪个位置,并改变相应位置上的值,类二进制表示就是0变为1或1变为0的过程,但是改变十进制的数组则是改变对应的位的2^n的增加减少过程。

如:

var supportType = { //按位编码,预留3位

'app':4,

'pc':2,

'mini':1

}

var supportVal = 0;

i f(obj.supportmini == 1){ //支持小程序

supportVal= supportVal+supportType .mini;

}

if(obj.supportPc == 1){ //支持pc

supportVal= supportVal+ supportType .pc;

}

obj.supportVal= supportVal;

最后,把对应的十进制存到数据库中即可。

更多场景参考这里。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值