检查 php 中位字段是否打开的正确方法是什么

问题描述 投票:0回答:5

检查位字段是否打开的正确方法是什么 - (在 php 中)?

我想检查来自 db(mysql) 的位字段是否打开。

这是正确的方法吗?

if($bit & 1)

还有其他方法吗?

我看到有人使用 ord() 函数编写代码,这是正确的吗?

喜欢

if(ord($bit) == 1)

php bit-manipulation
5个回答
11
投票

使用

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

其中

$n
是获得 减一 的第 n 位(例如,
$n=0
获得最低有效位)


6
投票

我用

if ($flag & 0b010) {
  // here we know that the second bit (dec 2) is set in $flag
}

5
投票

有点晚了,但可能对未来访问这个问题的人有用。我为自己制作了一个小函数,它返回某个标志中活动的所有位。

/**
 * 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 "</pre>";

3
投票

是的,

if($bit & 1)
是正确的检查方法,根据PHP手册

另一种方法是在 MySQL 查询中进行检查。


2
投票

要获取正确的位,请使用以下语法:

$bit & (1 << $n)

其中

$n
是获取第(n+1)个最低有效位。因此
$n=0
将为您提供第一个最低有效位。

© www.soinside.com 2019 - 2024. All rights reserved.