如果我有標誌的數組,我想他們按位結合PHP數組按位
即結合:
$foo = array(flag1, flag2);
到
$bar = flag1 | flag2;
PHP是否有什麼好的功能這對我來說會很好嗎?
如果我有標誌的數組,我想他們按位結合PHP數組按位
即結合:
$foo = array(flag1, flag2);
到
$bar = flag1 | flag2;
PHP是否有什麼好的功能這對我來說會很好嗎?
的array_reduce
將減少的陣列,以一個單一的值爲您:
$res = array_reduce($array, function($a, $b) { return $a | $b; }, 0);
減少有時也被稱爲倍(折向左或向右摺疊)在其他語言。
你可以做到這一點,像這樣
$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;'));
);
accepted answer的一個簡單建議:創建一個兄弟到array_sum
。
function array_or (array $array): int {
return array_reduce($array, function($a, $b) { return $a | $b; }, 0);
}
這隻適用於php> 5.3。 – 2010-07-24 15:55:37
添加了<5.3答案 – Wrikken 2010-07-24 16:36:57