if I have an array of flags and I want to combine them with a bitwise conjunction
ie:
$foo = array(flag1, flag2);
into
$bar = flag1 | flag2;
Does PHP have any good functions that will do this nicely for me already?
if I have an array of flags and I want to combine them with a bitwise conjunction
ie:
$foo = array(flag1, flag2);
into
$bar = flag1 | flag2;
Does PHP have any good functions that will do this nicely for me already?
Yes. You're syntax is correct too. Check out http://php.net/manual/en/language.operators.bitwise.php
You could do it like so
$bar = $foo[0] | $foo[1]
If the size of your array is unknown you could use array_reduce like this
// in php > 5.3
$values = array_reduce($flagArray, function($a, $b) { return $a | $b; });
// in php <= 5.2
$values = array_reduce($flagArray, create_function('$a, $b', 'return $a | $b'));
$values = array_reduce($foo,function($a,$b){return is_null($a) ? $b : $a | $b;});
PHP < 5.3 (no closures), either of these two:
function _mybitor($a,$b){return is_null($a) ? $b : $a | $b;}
$values = array_reduce($foo,'_mybitor');
or
$values = array_reduce($foo,create_function('$a,$b','return is_null($a) ? $b : $a | $b;'));
);
The array_reduce
will reduce an array to a single value for you:
$res = array_reduce($array, function($a, $b) { return $a | $b; }, 0);
Reduce is also sometimes called fold (fold left or fold right) in other languages.