二进制运算符按位与 & 巧妙解决复选框的

今天遇到一个需求,简单点来说就是有一个复选框的选项如下:

爱好: 篮球 ☑ 足球 ☑ 羽毛球 ☑

在数据库中的存储有一下2种思路:

1 定义一个字段 hobby tinyint 1篮球 2足球 3羽毛球 4篮球+足球 5篮球+羽毛球 6篮球+羽毛球 7足球+羽毛球 8篮球+足球+羽毛球

即:把这三个选项进行排列组合找出每种情况进行存储

这样做可以满足业务的需求,但是如果要是将来再添加一个选项的话,那么将是一场灾难。

2 使用php 中的&运算符 按位与运算符

定义如下

2篮球 4足球 8 羽毛球

数据库中的hobby字段存储的就是选择后的和,这样在进行编辑或者获取这个用户的爱好的时候只要做一次按位与&运算就行了

例子:

如果我选择了篮球 足球 乒乓球 则数据库存的是所有之和 14 在编辑的时候只需要从数据库里的 14 和选项做与 & 运算 大于0 说明选择了 小于0则说明没有选择 $res = 14 & $pingpong;输出8 var_dump($res);

本作品采用《CC 协议》,转载必须注明作者和本文链接
YLR
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 2

存一个json不就可以嘛

4年前 评论
YLR

当然可以,我想表达的重点是对于权限的验证这块,可能是我举的例子不够好,比如linux下的权限 读 写 执行 001 010 111

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!