背景:一個會員有三個狀態,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;