在PHP中将字符串解析为布尔值

Mar*_*ark 120 php parsing boolean

今天我正在玩PHP,我发现字符串值"true"和"false"在条件中没有被正确解析为boolean,例如考虑以下函数:

function isBoolean($value) {
   if ($value) {
      return true;
   } else {
      return false;
   }
}
Run Code Online (Sandbox Code Playgroud)

如果我执行:

isBoolean("true") // Returns true
isBoolean("") // Returns false
isBoolean("false") // Returns true, instead of false
isBoolean("asd") // Returns true, instead of false
Run Code Online (Sandbox Code Playgroud)

它似乎只与"1"和"0"值一起使用:

isBoolean("1") // Returns true
isBoolean("0") // Returns false
Run Code Online (Sandbox Code Playgroud)

PHP中是否有一个本机函数将"true"和"false"字符串解析为boolean?

Eri*_*ron 389

有一个本机PHP方法,它使用PHP的filter_var方法:

$bool = filter_var($value, FILTER_VALIDATE_BOOLEAN);
Run Code Online (Sandbox Code Playgroud)

根据PHP的手册:

对于"1","true","on"和"yes",返回TRUE.否则返回FALSE.

如果设置了FILTER_NULL_ON_FAILURE,则仅为"0","false","off","no"和""返回FALSE,并为所有非布尔值返回NULL.

  • @Mobiletainment,是的 - 它可以处理任何你能想象到的$ value值(假,FALSE,FalSe等) (3认同)
  • 答案让我措手不及,因为你必须在``filter_var()``函数中添加标题``FILTER_NULL_ON_FAILURE``,而不是按照我的想法用``FILTER_VALIDATE_BOOLEAN``替换它.这将导致以下代码对我起作用:``$ bool = filter_var($ value,FILTER_VALIDATE_BOOLEAN,FILTER_NULL_ON_FAILURE)``` (3认同)

Arn*_*anc 14

原因是所有字符串true在将它们转换为布尔值时进行评估,除了"0"""(空字符串).

以下函数将完全按照您的要求执行:它的行为与PHP完全相同,但也会将字符串计算"false"false:

function isBoolean($value) {
   if ($value && strtolower($value) !== "false") {
      return true;
   } else {
      return false;
   }
}
Run Code Online (Sandbox Code Playgroud)

该文档解释说:http://php.net/manual/en/language.types.boolean.php:

转换为布尔值时,以下值被视为FALSE:

  • 布尔值FALSE本身
  • 整数0(零)
  • 浮点数0.0(零)
  • 空字符串,字符串"0"
  • 一个零元素的数组
  • 特殊类型NULL(包括未设置的变量)
  • 从空标签创建的SimpleXML对象

每个其他值都被视为TRUE(包括任何资源).

  • +1 不错。(可以在那里放一个 strtolower,但仅此而已。) (2认同)
  • @Marco - if($ value && strtolower($ value)!=="faux"){如果你是用法语工作; if($ value && strtolower($ value)!=="falsch"){in german; if($ value && strtolower($ value)!=="onwaar"){in dutch ...你可以理解为什么PHP没有内置标准 (2认同)

Bol*_*ock 5

仅在PHP中"0"或空字符串强制为false; 每隔一个非空字符串强制为true.从手册:

转换为布尔值时,会考虑以下值FALSE:

  • 空字符串,字符串"0"

你需要编写自己的函数来处理字符串"true"VS "false".在这里,我假设其他一切都默认为false:

function isBoolean($value) {
   if ($value === "true") {
      return true;
   } else {
      return false;
   }
}
Run Code Online (Sandbox Code Playgroud)

在侧面说明,可以很容易地浓缩

function isBoolean($value) {
   return $value === "true";
}
Run Code Online (Sandbox Code Playgroud)