si tengo un conjunto de banderas y quiero combinarlos con una conjunción bit a bitPHP matriz bit a bit
es decir:
$foo = array(flag1, flag2);
en
$bar = flag1 | flag2;
¿El PHP tiene ningún buenas funciones eso ya lo hará bien para mí?
si tengo un conjunto de banderas y quiero combinarlos con una conjunción bit a bitPHP matriz bit a bit
es decir:
$foo = array(flag1, flag2);
en
$bar = flag1 | flag2;
¿El PHP tiene ningún buenas funciones eso ya lo hará bien para mí?
El array_reduce
reducirá una matriz a un solo valor para usted:
$res = array_reduce($array, function($a, $b) { return $a | $b; }, 0);
Reducir también a veces se llama pliegue (doble la izquierda o hacia la derecha veces) en otros idiomas.
que podría hacerlo igual que
$bar = $foo[0] | $foo[1]
Si el tamaño de la matriz es desconocida podría utilizar array_reduce como éste
// 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 (sin cierres), o bien de estos dos:
function _mybitor($a,$b){return is_null($a) ? $b : $a | $b;}
$values = array_reduce($foo,'_mybitor');
o
$values = array_reduce($foo,create_function('$a,$b','return is_null($a) ? $b : $a | $b;'));
);
Una sugerencia simple para accepted answer: crear un hermano array_sum
.
function array_or (array $array): int {
return array_reduce($array, function($a, $b) { return $a | $b; }, 0);
}
Esto solo funciona en php> 5.3. –
Agregó la respuesta <5.3 – Wrikken