php-массив побитовый

если у меня есть массив флагов, и я хочу объединить их с поразрядным соединением

то есть:

$foo = array(flag1, flag2); 

в

 $bar = flag1 | flag2; 

Есть ли у PHP какие-либо хорошие функции, которые сделают это для меня уже хорошо?

Solutions Collecting From Web of "php-массив побитовый"

array_reduce уменьшит массив до одного значения для вас:

 $res = array_reduce($array, function($a, $b) { return $a | $b; }, 0); 

Сокращение также иногда называется fold (fold left или fold right) на других языках.

Вы могли бы так сделать

 $bar = $foo[0] | $foo[1] 

Если размер вашего массива неизвестен, вы можете использовать array_reduce, как это

 // 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 (без закрытия), любой из этих двух:

 function _mybitor($a,$b){return is_null($a) ? $b : $a | $b;} $values = array_reduce($foo,'_mybitor'); 

или

 $values = array_reduce($foo,create_function('$a,$b','return is_null($a) ? $b : $a | $b;')); 

);

Простое предложение к принятому ответу : создайте родного брата для array_sum .

 function array_or (array $array): int { return array_reduce($array, function($a, $b) { return $a | $b; }, 0); }