web-dev-qa-db-fra.com

Convertit une valeur booléenne en valeur entière php

Existe-t-il une fonction intégrée pour PHP qui prend une valeur booléenne et renvoie son équivalent entier? 0 pour FALSE, 1 pour TRUE? Bien sûr, vous pouvez facilement créer une fonction pour le faire, je demande simplement s'il existe une fonction intégrée dans PHP. J'ai déjà essayé intval() et le transforme en (int) mais ils ne fonctionnent pas, ils renvoient 0 dans les deux cas TRUE et FALSE.

Edit: le problème était que ce n'était pas vraiment un booléen, c'était une chaîne "false", "true", php n'a pas détecté le message jQuery qu'il a passé un booléen. problème résolu, merci!

33
user2990361

http://www.php.net/manual/en/language.types.integer.php

Normalement, simplement $myInt = (int)$myBoolean devrait fonctionner, pouvez-vous nous montrer votre code autrement?

57
Jérémy Dutheil

Ajoutez simplement un "+" avant votre variable comme ceci:

$myBool = true; 

var_dump(+$myBool);

ouputs: int(1);
13
Dawa

Si vous obtenez votre valeur de JSON I.E. Via un POST AJAX, la valeur entrera sous forme de chaîne (comme vous l'avez trouvé). Une solution consiste à comparer la chaîne true/false, puis à convertir le bool en int 

$requestBool = $_REQUEST['bool_value']; //This is 'true' or 'false'

$myInt = (int)($requestBool === 'true');
echo $myInt;

//returns: 0 or 1
3
Sam Boyne

Si vous n'êtes pas sûr du type de données, voir l'exemple ci-dessous, il fonctionne avec les chaînes, les entiers et les booléens.

<?php

$options = [ TRUE, FALSE, 'true', 'false', 1, 0, '1', '0', 'on', 'off', 'yes', 'no' ];

foreach ( $options as $option ) {
    $bool = filter_var( $option, FILTER_VALIDATE_BOOLEAN ); // TRUE or FALSE
    print (int) $bool . ' '; // 1 or 0
} 
// Outputs: 1 0 1 0 1 0 1 0 1 0 1 0 

?>

filter_var ($ var, FILTER_VALIDATE_BOOLEAN) retournera bool (true) ou bool (false) puis sera simplement convertie en entier.

filter_var ()

(PHP 5> = 5.2.0, PHP 7)

filter_var - Filtre une variable avec un filtre spécifié

3
Nathan Duckett
echo (int)true;
echo '<br>';
echo (int)false;
echo '<br>';
echo intval(true);
echo '<br>';
echo intval(false);
echo '<br>';
echo true + true;
0
Samuel Cook

Vous pouvez faire plusieurs castings en une seule fois:

$isTest = 'true';

(int)(bool)$isTest

echo $isTest; // this outputs 1
0
user1976610