Как правильно проверить, включено ли битовое поле в php
Как правильно проверить, включено ли битовое поле - (в php)?
Я хочу проверить битовое поле, которое поступает из бд (mysql), включено оно или нет.
Это правильный путь?
if($bit & 1)
Есть ли другие способы?
Я вижу, что кто-то кодирует, используя функцию ord(), это правильно?
Как if(ord($bit) == 1)
5 answers
Это правильный способ проверки, согласно руководству по PHP.
Альтернативой может быть проверка в вашем запросе MySQL.
Использовать
if( $bit & (1 << $n) ) {
// do something
}
Где $n
- это n-й бит для получения минус один (например, $n=0
для получения наименее значимого бита)
Немного поздно, но может быть полезно для будущих посетителей этого вопроса. Я сделал себе небольшую функцию, которая возвращает все биты, активные в определенном флаге.
/**
* 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>";
Чтобы получить правильный бит, используйте следующий синтаксис:
$bit & (1 << $n)
Где $n
- это получить (n+1)-й наименее значимый бит. Таким образом, $n=0
даст вам первый наименее значимый бит.
Я использую
if (($flag & 0b010) == 0b010) {
// here we know that the second bit (dec 2) is set in $flag
}