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

发布于 2024-09-15 09:34:46 字数 318 浏览 3 评论 0原文

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

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

这是正确的方法吗?

if($bit & 1)

还有其他方法吗?

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

就像if(ord($bit) == 1)

What is the correct way to check if bit field is turn on - (in php) ?

I want to check a bit field that come from db(mysql) if is turn on or not.

is this is the correct way ?

if($bit & 1)

Are there other ways ?

I see somebody code that using ord() function , it is correct ?

like if(ord($bit) == 1)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

谁人与我共长歌 2024-09-22 09:34:46

使用

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

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

Use

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

Where $n is the n-th bit to get minus one (for instance, $n=0 to get the least significant bit)

失而复得 2024-09-22 09:34:46

我用

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

I use

if ($flag & 0b010) {
  // here we know that the second bit (dec 2) is set in $flag
}
但可醉心 2024-09-22 09:34:46

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

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

It's a bit late but might be usefull for future visitors to this question. I've made myself a little function that returns all bits that are active in a certain flag.

/**
 * 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>";
无人问我粥可暖 2024-09-22 09:34:46

是的,根据PHP 手册

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

Yes, if($bit & 1) is the correct way to check, according to the PHP manual.

An alternative could be to do the check in your MySQL query.

寻找一个思念的角度 2024-09-22 09:34:46

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

$bit & (1 << $n)

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

To get the correct bit, use this syntax:

$bit & (1 << $n)

Where $n is to get the (n+1)-th least significant bit. So $n=0 will get you the first least significant bit.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文