试图将一个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