битовый массив php - PullRequest
       6

битовый массив php

6 голосов
/ 24 июля 2010

если у меня есть массив флагов, и я хочу объединить их с побитовым соединением

, то есть:

$foo = array(flag1, flag2);

в

$bar = flag1 | flag2;

Есть ли в PHPкакие-нибудь хорошие функции, которые сделают это хорошо для меня уже?

Ответы [ 4 ]

16 голосов
/ 24 июля 2010

array_reduce уменьшит массив до единого значения для вас:

$res = array_reduce($array, function($a, $b) { return $a | $b; }, 0);

Сокращение также иногда называют сложением (сложить влево или свернуть вправо) на других языках.

3 голосов
/ 24 июля 2010

Вы можете сделать это так

$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'));
1 голос
/ 24 июля 2010
$values = array_reduce($foo,function($a,$b){return is_null($a) ? $b : $a | $b;});

PHP <5.3 (без замыканий), любой из этих двух: </p>

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

);

0 голосов
/ 07 апреля 2017

Простое предложение для принятого ответа : создайте брата для array_sum.

function array_or (array $array): int {
    return array_reduce($array, function($a, $b) { return $a | $b; }, 0);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...