测试字符串是否可以是布尔值PHP

Dex*_*url 8 php boolean

我从$ _GET获取一个字符串,我想测试它是否是一个布尔值,然后我将它用于mysql查询的一部分.是否有更好的方法:

function checkBool($string){
    $string = strtolower($string);
    if ($string == "true" || $string == "false" || 
        $string == "1" || $string == "0"){
        return true;
    }
    else {
        return false;
    }
}

if (checkBool($_GET['male'])){
    $result = mysql_query(
        "SELECT * FROM my_table " .
        "WHERE male='".$_GET['male']."'") or die(mysql_error());
}
Run Code Online (Sandbox Code Playgroud)

zrv*_*van 13

您可以使用is_bool()或在php.net上建议:

<?php
$myString = "On";
$b = filter_var($myString, FILTER_VALIDATE_BOOLEAN);
?>
Run Code Online (Sandbox Code Playgroud)

http://php.net/manual/en/function.is-bool.php

后者将接受像"on"和"yes"这样的字符串也是如此.


Sho*_*hoe 11

顺便说一下,有一种更清晰的写作方式:

function checkBool($string){
    $string = strtolower($string);
    return (in_array($string, array("true", "false", "1", "0", "yes", "no"), true));
}
Run Code Online (Sandbox Code Playgroud)

但是,是的.你写下的那个是唯一的方法.

  • @daiscog,认真吗?它需要多少钱?0.000000000000000000000000000001纳秒来执行对该功能的123456789调用?你需要弄清楚原始功能的作用时间可能接近3分钟. (3认同)
  • 这可能看起来更整洁,但涉及PHP的更多开销.它必须创建一个数组,将其存储在堆中,然后调用另一个进行比较的函数.原始功能更有效. (2认同)

Mag*_*eit 5

如果你使用 flag FILTER_NULL_ON_FAILUREfilter_var()会很好地工作:

function CheckBool($Value) {
  return null !== filter_var($Value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
}
Run Code Online (Sandbox Code Playgroud)