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

Php 使用二进制将选择存储为整数,php,binary,Php,Binary,我知道这是可能的,我只是不知道它叫什么,谷歌也没帮上什么忙 假设您有4个选项可供选择,A、B、C和D。如果用户选择A和C,您只需将选择保存为5,即=0101;如果用户选择D(1000),则保存为8 我的问题是,在保存5后,如何将其转换回A=1、B=0、C=1、D=0 我试图避免电影时代的限制,并认为这可能是最好的方法。我相信这个术语是BCD(二进制编码的十进制) 以下是如何在您的情况下实施它: 创建4个变量(或常量),表示4个可能的选择,并按如下方式设置它们的值: $A=1 $B=2 $C=4

我知道这是可能的,我只是不知道它叫什么,谷歌也没帮上什么忙

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

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

我试图避免电影时代的限制,并认为这可能是最好的方法。

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

以下是如何在您的情况下实施它:

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

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

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

  • 在您存储了该组合值之后,然后将其读回,并希望解码存储值中的选项

    为此,请使用
    &
    运算符(按位
    )。例如,假设已存储并读回名为
    $Answer
    的变量的值为
    5

    要将
    答案
    解码为如下选项:

    $intChoiceA = ($Answer & 1);
    $intChoiceB = ($Answer & 2);
    $intChoiceC = ($Answer & 4);
    $intChoiceD = ($Answer & 8);
    
    $bChoiceA = ($Answer & 1) > 0;
    $bChoiceB = ($Answer & 2) > 0;
    $bChoiceC = ($Answer & 4) > 0;
    $bChoiceD = ($Answer & 8) > 0;
    
    要将选项设置为
    True | False
    ,您可以这样做:

    $intChoiceA = ($Answer & 1);
    $intChoiceB = ($Answer & 2);
    $intChoiceC = ($Answer & 4);
    $intChoiceD = ($Answer & 8);
    
    $bChoiceA = ($Answer & 1) > 0;
    $bChoiceB = ($Answer & 2) > 0;
    $bChoiceC = ($Answer & 4) > 0;
    $bChoiceD = ($Answer & 8) > 0;
    
    要将选项设置为
    0 | 1
    ,可以这样做(使用PHP:

    通过使用,您可以这样做:

    $intChoiceA = ($Answer & 1);
    $intChoiceB = ($Answer & 2);
    $intChoiceC = ($Answer & 4);
    $intChoiceD = ($Answer & 8);
    
    $bChoiceA = ($Answer & 1) > 0;
    $bChoiceB = ($Answer & 2) > 0;
    $bChoiceC = ($Answer & 4) > 0;
    $bChoiceD = ($Answer & 8) > 0;
    
    $A=1;
    $B=0;
    $C=1;
    $D=0;//输入数据
    $i=$A |($B3;
    echo“$A$B$C$D”;//打印“10”
    
    您可以使用。基本上,您可以通过对两个或多个数字进行按位运算,然后通过对要测试的数字进行按位运算来检查是否输入了某个数字来实现此效果

    例子: 您希望用户选择他们能流利使用的语言。您提供的选项包括英语、德语、俄语和西班牙语。
    首先,以2的幂定义选项:

    $LANGUAGE_ENGLISH = 2;
    $LANGUAGE_RUSSIAN = 4;
    $LANGUAGE_GERMAN = 8;
    $LANGUAGE_SPANISH = 16;
    
    假设用户选择英语和俄语。您可以按如下方式组合选项:

    $selected_options = 0; // we'll store the result in here
    $selected_options = $LANGUAGE_ENGLISH | $LANGUAGE_RUSSIAN;
    //It can also be express as:
    //$selected_options |= $LANGUAGE_ENGLISH;
    //$selected_options |= $LANGUAGE_RUSSIAN;
    

    $selected\u options
    变量现在包含用户的选项。要检查是否存储了选项,请按位执行AND。如果结果为0,则不存储该值。否则,将存储该值。
    示例:

    if ($selected_options & $LANGUAGE_ENGLISH != 0)
        echo "English was selected";
    else
        echo "English was NOT selected";
    
    要求: 所有数字都需要有不重叠的位。防止重叠的最简单方法是只使用2的幂的数字。例如,在下表中,
    3
    2
    重叠,不能与
    2
    1
    一起使用,但是,与
    2
    4
    不重叠,因此可以是我们他们两个都喜欢

    1: 0001
    2: 0010
    3: 0011
    4: 0100
    

    希望这有帮助

    是的,但我如何再次检索它?那么,你的意思是,你最终得到的值是
    5
    ,例如,你存储在某个地方。然后你读回了5,并想转换回选项?更新了问题。很抱歉:)@Xesthron-我更新了答案,以显示除了
    True | False
    之外如何返回值
    0 | 1
    。我会想到一个包含所有值的表,然后进行查找。问题是,为什么要以二进制方式执行此操作?我正在寻找一种简单的方法来存储所有不同年龄限制的选择,因为有q我记得几年前有一个程序员告诉我这种方法,他很想尝试一下,看看我是否能让它工作。不确定现在是否有更简单/更好的方法?我确实在这里的某个地方看到过,但没有找到,但我找到了,这似乎很有趣。(关于如何将整数转换为布尔值,还有许多php选项,例如:
    $A=(布尔值)($i&1);$B=(布尔值)($i&2);$C=(布尔值)($i&4);$D=(布尔值)($i&8);