nếu tôi có một loạt các lá cờ và tôi muốn kết hợp chúng với một kết hợp Bitwisephp mảng Bitwise
ví dụ:
$foo = array(flag1, flag2);
vào
$bar = flag1 | flag2;
Liệu PHP có bất kỳ chức năng tốt điều đó sẽ làm điều này tốt cho tôi?
nếu tôi có một loạt các lá cờ và tôi muốn kết hợp chúng với một kết hợp Bitwisephp mảng Bitwise
ví dụ:
$foo = array(flag1, flag2);
vào
$bar = flag1 | flag2;
Liệu PHP có bất kỳ chức năng tốt điều đó sẽ làm điều này tốt cho tôi?
Các array_reduce
sẽ giảm một mảng đến một giá trị duy nhất cho bạn:
$res = array_reduce($array, function($a, $b) { return $a | $b; }, 0);
Giảm cũng đôi khi được gọi lần (gấp sang trái hoặc gấp bên phải) trong các ngôn ngữ khác.
Bạn có thể làm điều đó như vậy
$bar = $foo[0] | $foo[1]
Nếu kích thước của mảng của bạn không biết bạn có thể sử dụng array_reduce như thế này
// 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 (không đóng cửa), hoặc của hai số này:
function _mybitor($a,$b){return is_null($a) ? $b : $a | $b;}
$values = array_reduce($foo,'_mybitor');
hoặc
$values = array_reduce($foo,create_function('$a,$b','return is_null($a) ? $b : $a | $b;'));
);
Đề xuất đơn giản cho accepted answer: tạo anh chị em cho array_sum
.
function array_or (array $array): int {
return array_reduce($array, function($a, $b) { return $a | $b; }, 0);
}
Điều này chỉ hoạt động trong php> 5.3. –
Đã thêm câu trả lời <5.3 – Wrikken