Location: PHPKode > scripts > Bitmask Magic > bitmask_example.php
<?php
require_once('bitmask.class.php');
echo "<pre>";
// Initiate the bitmask class
$bm = new bitmask;

// Create an array of values 
// Notice this is backwards from the binary representation.  This is because values are 
// inserted from right to left by the nature of bitmasks.
$bitmaskarr = array (0,1,0,0,1,0,0,0,1,1,1,0,1,0,1,1,1);

// Insert the array into the class
$bm->add_element($bitmaskarr);

// Show the mask created from the array
echo $bm->forward_mask . "\n";

// Show the binary representation of the array
echo $bm->bin_mask . "\n";

// This prints the array that was entered.  Notice that it is also in reverse order 
// from the binary representation.
print_r($bm->mask_array);

// Here we can reset the entire contents by inserting our own bitmask
// this mask represents bits 15, 13, 8, and 4 being set
$bm->reverse_mask('41232');
print_r($bm->mask_array);

// Example of unsetting bit 13
$bm->unset_bit(13);
print_r($bm->mask_array);

// Example of setting bit 6
$bm->set_bit(6);
print_r($bm->mask_array);

$bm->reverse_mask('0'); // reset the object

// Now a more useful example. (for those not familiar with bitmasks)
// We will create an array of items.  Lets say someone purchases a lot of widgets 
// with various options.  We can create a product code from what they choose and
// convert it back and forth and we can always know solely from that code what 
// was purchased. (Yes, I know I don't need these keys, they're just for illustration)

$widgets = array( 0 => 'blue',
				  1 => 'red',
				  2 => 'yellow',
				  3 =>'green',
				  4 => 'purple',
				  5 => 'small',
				  6 => 'medium',
				  7 => 'large',
				  8 => 'X-large',
				  9 => 'hard',
				  10 => 'soft');
				  
// enter the key values for the options
$bm->assoc_keys = $widgets;

// from a form, you find that the person wants a hard green extra large widget.
// so we enter 10,8, and 3 into our bitmask.
$customer_order = array(10,8,3);
foreach ($customer_order as $option) {
	$bm->set_bit($option);
}

// Now we have our product code. (1288)
echo $bm->forward_mask;

// If we ever need to convert that product code back to real text, we just have to 
// enter it into our class and it gets converted back.
$bm->reverse_mask('1288');

// Get the class to return the options for the widget.
print_r($bm->assoc_get(false));

// One final example.  Query an individual bit to see if the option is set.

echo $bm->bit_isset(3)?'true':'false';

// bitmasks can also be used for verification of user priveleges, storing user settings in a
// simple fashion, and various other things.  Any time you have a list of things that can either
// be true or false, you just have to pull out a bitmask to make life easy.

echo "</pre>";
?>
Return current item: Bitmask Magic