Как правильно проверить, включено ли битовое поле в php - PullRequest
3 голосов
/ 18 августа 2010

Как правильно проверить, включено ли битовое поле - (в php)?

Я хочу проверить битовое поле, полученное из db (mysql), если включено или нет.

это правильный путь?

if($bit & 1)

Есть ли другие способы?

Я вижу кто-то код, использующий функцию ord () , этоправильно?

как if(ord($bit) == 1)

Ответы [ 5 ]

8 голосов
/ 18 августа 2010

Используйте

if( $bit & (1 << $n) ) {
  // do something
}

Где $n - это n -й бит, чтобы получить минус один (например, $n=0 для получения наименьшегозначащий бит)

3 голосов
/ 19 февраля 2015

Уже немного поздно, но может быть полезно для будущих посетителей этого вопроса.Я сделал себе маленькую функцию, которая возвращает все биты, которые активны в определенном флаге.

<code>/**
 * Shows all active bits
 *
 * @param int $flag
 * @return array
 */
function bits($flag)
{
    $setBits = array();
    for ($i = 1; $i <= 32; $i++) {
        if ($flag & (1 << $i)) {
            $setBits[] = (1 << $i);
        }
    }

    // Sort array to order the bits
    sort($setBits);

    return $setBits;
}

echo "<pre>";
var_dump(bits(63));
echo "
";
1 голос
/ 19 октября 2016

Я использую

if (($flag & 0b010) == 0b010) {
  // here we know that the second bit (dec 2) is set in $flag
}
1 голос
/ 18 августа 2010

Чтобы получить правильный бит, используйте этот синтаксис:

$bit & (1 << $n)

Где $n - получить ( n + 1) -й младший значащий бит. Так что $n=0 даст вам первый младший бит.

1 голос
/ 18 августа 2010

Да, if($bit & 1) - это правильный способ проверки, согласно руководству PHP .

Альтернативой может быть проверка в вашем запросе MySQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...