代码之家  ›  专栏  ›  技术社区  ›  Haim Evgi

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

  •  2
  • Haim Evgi  · 技术社区  · 14 年前

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

    if($bit & 1)
    

    还有别的办法吗?

    我看到有人用 ord() 功能,是否正确?

    喜欢 if(ord($bit) == 1)

    5 回复  |  直到 14 年前
        1
  •  9
  •   Frxstrem    6 年前

    使用

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

    $n -要得到的位子 负一 $n=0 获取最低有效位)

        2
  •  4
  •   Peter    9 年前

    /**
     * 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
  •  4
  •   santiago arizti    8 年前

    我用

    if (($flag & 0b010) == 0b010) {
      // here we know that the second bit (dec 2) is set in $flag
    }
    
        4
  •  3
  •   Samuel Liew cicero lopes    5 年前

    对, if($bit & 1) 是正确的检查方法,根据 the PHP manual .

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

        5
  •  1
  •   Gumbo    14 年前

    $bit & (1 << $n)
    

    在哪里? $n +1) -th最低有效位。所以呢 $n=0 将得到第一个最低有效位。