使用二进制将选择存储为整数

Xet*_*ron 5 php binary

我知道这是可能的,我只是不知道它叫什么,谷歌也没有提供太多帮助。

假设您有 4 个选项可供选择:A、B、C 和 D。如果用户选择 A 和 C,您只需将选择保存为 5(= 0101),或者如果用户选择 D (1000),则保存为 8。

我的问题是,保存后如何将 5 转换回 A=1、B=0、C=1、D=0?

我正在努力挽救电影的年龄限制,并认为这可能是最好的方法。

Kev*_*gan 5

我相信这个术语是BCD(二进制编码的十进制)。

以下是根据您的情况实施的方法:

  1. 创建 4 个变量(或常量)代表 4 种可能的选择,并按如下方式设置它们的值:

    $A = 1;
    $B = 2;
    $C = 4;
    $D = 8;

  2. 然后,对于 A、B、C 和 D 中的每个选项,添加关联变量的值。

存储该组合值后,稍后将其读回,并且您想要从存储的值中解码选择......

为此,您可以使用&运算符(按位AND)。例如,假设您存储并读回到名为 的变量中的值$Answer5

解码Answer为这样的选择:

$intChoiceA = ($Answer & 1);
$intChoiceB = ($Answer & 2);
$intChoiceC = ($Answer & 4);
$intChoiceD = ($Answer & 8);
Run Code Online (Sandbox Code Playgroud)

要获得 的选择True|False,您可以这样做:

$bChoiceA = ($Answer & 1) > 0;
$bChoiceB = ($Answer & 2) > 0;
$bChoiceC = ($Answer & 4) > 0;
$bChoiceD = ($Answer & 8) > 0;
Run Code Online (Sandbox Code Playgroud)

要获得选项0|1,您可以这样做(使用 PHP三元运算符

$intChoiceA = (($Answer & 1) > 0) ? 1 : 0;
$intChoiceB = (($Answer & 2) > 0) ? 1 : 0;
$intChoiceC = (($Answer & 4) > 0) ? 1 : 0;
$intChoiceD = (($Answer & 8) > 0) ? 1 : 0;
Run Code Online (Sandbox Code Playgroud)