2013-08-26 78 views
2

我在查詢一個數據庫,它返回一個長整數的布爾值。例如0011000000000100001000000010000000000100000000000000.來自php整數的布爾值

1個值中的每一個等同於一個字符串。例如。空調或動力轉向。如果該值爲0,則車輛不具有此選項。

我想找出一種方法來循環這個大整數,並返回該車的每個「選項」的名稱。

我對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。數組中有空選項,因爲選項圖不完整。它正確地填寫了「動力轉向」和「制動器」,對應於字符串中的前兩個1

0

我會推薦這樣的東西。

  1. 循環通過串
  2. 分配在陣列中(然後可以稍後訪問任何項目陣列中的,或通過整個陣列,其可以拉你的值的另一功能的每個選項的長度。
  3. 創建這樣的功能如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 
} 
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 

你也可以使用右移>>運營商,通過兩個大國去,但我沒有足夠的無聊編寫代碼。