背景:一个会员有三个状态,A、B、C,其中一个人可以为 A、B、C、AB;之前数据表结构加了三个字段is_a、is_b、is_c; 本人实在不想这样粗糙的实现需求,遂决定用位运算优化。
上代码:
位运算可以用来处理状态值。这些状态值通常表示为2的幂次方数字,通过不同的组合可以表示不同的状态或条件。
<?php
// 定义状态常量
define('A', 1); // 001
define('B', 2); // 010
define('C', 4); // 100
// 设置用户状态
$status = 0;
echo '值:' . $status . PHP_EOL;
$status |= A; // 设置活跃状态
echo '值:' . $status . PHP_EOL;
$status |= B; // 添加不活跃状态
echo '值:' . $status . PHP_EOL;
// 检查状态
if ($status & A) {
echo "用户等级 A" . PHP_EOL;
}
if ($status & B) {
echo "用户等级 B" . PHP_EOL;
}
if ($status & C) {
echo "用户等级 C" . PHP_EOL;
}
// 移除状态
$status &= ~B; // 移除B
echo '值:' . $status . PHP_EOL;