【发布时间】:2011-03-20 12:46:02
【问题描述】:
如果我有一个标志数组,并且我想将它们与按位连词组合起来
即:
$foo = array(flag1, flag2);
进入
$bar = flag1 | flag2;
PHP 有什么好的函数可以很好地为我做到这一点吗?
【问题讨论】:
标签: php arrays function bit-manipulation
如果我有一个标志数组,并且我想将它们与按位连词组合起来
即:
$foo = array(flag1, flag2);
进入
$bar = flag1 | flag2;
PHP 有什么好的函数可以很好地为我做到这一点吗?
【问题讨论】:
标签: php arrays function bit-manipulation
array_reduce 将为您将数组缩减为单个值:
$res = array_reduce($array, function($a, $b) { return $a | $b; }, 0);
Reduce 在其他语言中有时也称为折叠(向左折叠或向右折叠)。
【讨论】:
你可以这样做
$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
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;'));
);
【讨论】:
给accepted answer 的一个简单建议:为array_sum 创建一个兄弟姐妹。
function array_or (array $array): int {
return array_reduce($array, function($a, $b) { return $a | $b; }, 0);
}
【讨论】: