2010-07-24 10 views
5

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?

Trả lời

14

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.

3

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')); 
1
$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;')); 

);

+0

Điều này chỉ hoạt động trong php> 5.3. –

+0

Đã thêm câu trả lời <5.3 – Wrikken

0

Đề 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); 
    }