字符串到布尔值的转换..工作在4位,但不是8位


String to Bool Conversion ... works in 4 bit but not 8 bit

试图将一个php程序放在一起,该程序读取一个"menu"整数变量(通过URL传递),并将其转换为二进制字符串。。。然后读取字符串中的每个布尔值并将其添加到数组中。

适用于4位(尽管可能不是很有效)。。。。但不适用于8位?

<?php
$menubin = decbin($_GET['menu']);
$menulen = strlen($menubin)-1;

for($x=$menulen; $x > -1; $x--)
{
$array = $menulen-$x;
$menubool[$array] = substr($menubin,$x,1);
}
if($menubool[0] == '1') { ... }
if($menubool[1] == '1') { ... }
if($menubool[2] == '1') { ... }
if($menubool[3] == '1') { ... }
if($menubool[4] == '1') { ... }
if($menubool[5] == '1') { ... }
if($menubool[6] == '1') { ... }
if($menubool[7] == '1') { ... }
?>

假设您的$menubin字符串看起来像0100。这可以通过按位操作数和switch语句来实现。这种方法将给您一些灵活性,并允许您任意选择菜单项。

<?php
//string of selections
$string = "1011";
// result of bitshift on string
$bits = 0;
for($i = strlen($string); $i >= 0; $i -= 1){
    $bits += (int)$string[$i] << $i;
}
// arbitrarily make selections and cases as you add menu items
switch($bits) {
         case 1: 
             echo "menu item 1";
             break;
         case 2: 
             echo "menu item 2";
             break;
         case 4: 
             echo "menu item 3";
             break;
         case 8: 
             echo "menu item 4";
             break;
         case 13:
             echo "menu item 1, 3 and 4";
         break;
}
?> 

您可以这样做:

$int = 37; // for example
$bits = array();
$str = str_pad(decbin($int),8,"0",STR_PAD_LEFT);
    for ($i=0; $i<=7; $i++){
        $bits[7-$i] = substr($str,$i,1);
    }
var_dump($bits);

然后,只需根据菜单选项的需要访问数组中的位即可。

您最初的问题是decbin没有返回正确的字符串长度,因此出现了上面的填充函数。

在您的情况下,64将返回1000000而不是01000000