2010-08-18 6 views
2

Quelle est la bonne façon de vérifier si le champ de bit est activé - (en php)?Quelle est la bonne façon de vérifier si le champ de bit est allumé en php?

Je veux vérifier un champ bit qui vient de db (mysql) si est allumé ou non.

est-ce la bonne façon?

if($bit & 1) 

Y a-t-il d'autres façons?

Je vois un code qui utilise la fonction ord(), c'est correct?

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

+0

ord() renvoie la valeur ascii de chaîne de caractères qui sonne comme un moyen hackisk de faire les choses. – Chris

Répondre

1

C'est la bonne façon de vérifier, selon the PHP manual.

Une alternative pourrait être de faire la vérification dans votre requête MySQL.

+1

"Ceci est". Quel est? – Petah

1

Pour obtenir le bit correct, utilisez cette syntaxe:

$bit & (1 << $n) 

$n est d'obtenir le (n +1) -ème bit le moins significatif. Donc, $n=0 vous obtiendrez le premier bit le moins significatif.

+0

dans mon cas est? $ bit & (1 << 1)? (en db mis à 1) –

+0

je vois que dans mon cas est $ bit & (1 << 0) –

+0

@Haim Evgi: Oh oui, bien sûr, il est à base zéro. – Gumbo

6

Utilisez

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

$n est le n bits -ème pour obtenir moins un (par exemple, $n=0 pour obtenir le bit le moins significatif)

2

Il est un peu tard, mais peut-être être utile pour les futurs visiteurs de cette question. Je me suis fait une petite fonction qui retourne tous les bits qui sont actifs dans un certain drapeau.

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

J'utilise

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