我正在查询数据库,它返回一个长整数的布尔值。 E.g 0011000000000100001000000010000000000100000000000000。
1个值中的每一个都等于一个字符串。例如。空调或动力转向。如果值为0,那么Vehicle没有此选项。
我正试图找出一种循环这个大整数的方法,并返回汽车所具有的每个“选项”的名称。
我对PHP非常陌生,如果有人有解决方案,我非常感谢帮助。
非常感谢 安德鲁
答案 0 :(得分:3)
这很可能是一个字符串,您可以遍历它并为每个字符串查找地图中的名称:
$option_map = array(
'Air Conditioning',
'Sun roof',
'Power Steering',
'Brakes',
//.. Fill with all options
// Could populate from a database or config file
);
$str = '0011000000000100001000000010000000000100000000000000';
$strlen = strlen($str);
for($i = 0; $i < $strlen; $i++){
if($str[$i] === '1'){
$options[] = $option_map[$i];
}
}
// $options is an array containing each option
Demo Here。数组中有空选项,因为选项映射不完整。它正确地填充了“Power Steering”和“Brakes”,对应于字符串中的前两个1
。
答案 1 :(得分:0)
我会推荐这样的东西。
get_car_option
等函数并传递位置和值//force the value to be a string, where $longint is from your DB
$string = (string) $longint;
for($i=0; $i<strlen($string); $i++)
{
$array[$i] = get_car_option($i, substr($string, $i, 1));
}
//example of function
function get_car_option($pos, $value)
{
//you can then use this function to get the
//...values based on each number position
}
答案 2 :(得分:0)
类似的东西:
$myVal = 170; //10101010 in binary
$flags = array(
'bumpers' => 1, //00000001
'wheels' => 2, //00000010
'windshield' => 4, //00000100
'brakes' => 8, //00001000
...
);
echo "The car has: ";
foreach( $flags as $key => $value ) {
if( $myVal & $value ) {
echo $key . " and ";
}
}
// Output: Car has: wheels and brakes and
你也可以使用右移>>
运算符并使用2的幂,但我不会厌倦写这段代码。