来自php整数的布尔值

时间:2013-08-26 22:59:03

标签: php

我正在查询数据库,它返回一个长整数的布尔值。 E.g 0011000000000100001000000010000000000100000000000000。

1个值中的每一个都等于一个字符串。例如。空调或动力转向。如果值为0,那么Vehicle没有此选项。

我正试图找出一种循环这个大整数的方法,并返回汽车所具有的每个“选项”的名称。

我对PHP非常陌生,如果有人有解决方案,我非常感谢帮助。

非常感谢 安德鲁

3 个答案:

答案 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)

我会推荐这样的东西。

  1. 循环遍历字符串的长度
  2. 分配数组中的每个选项(然后您可以稍后访问数组中的任何项目,或将整个数组传递给另一个可以提取您的值的函数。
  3. 创建get_car_option等函数并传递位置和值
  4. //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)

使用bitwise operators

类似的东西:

$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的幂,但我不会厌倦写这段代码。