检查变量是否为布尔值

时间:2017-09-04 05:24:19

标签: php

我继承了一个非常古老的系统,它与许多其他系统交互,并且必须将其重写为REST,同时保持与旧客户端的兼容性。

它收到的可能输入之一可能是BOOL,但实际上,许多现有客户使用[1,“T”,“true”,“TRUE”,“verdadero”,......]所以我'我写了一个函数,检查一堆这些(我也记录所有查询,以防我以后必须添加),问题是它似乎随机工作;有时它给了我不是BOOL,有时候是真的,有时甚至是FALSE,对于我的生活,我无法弄清楚我做错了什么。

例如,“aaaaa”评估为FALSE,而“AAAAA”评估为TRUE。

function verBool($data) {
    $sale = "KO";
    $aceptados_true = array(1,"1","V","T","v","t","true","True","TRUE","verdadero","Verdadero","VERDADERO");
    $aceptados_false = array(0,"0","F","f","false","False","FALSE","falso","Falso","FALSO");
    if(in_array($data,$aceptados_true)) { $sale = "1"; }
    if(in_array($data,$aceptados_false)) { $sale = "0"; }
    return $sale;
}

2 个答案:

答案 0 :(得分:0)

在我看不到输入数据之前,我无法确切地说出错误。 但试着

  1. 分别向数组添加truefalse
  2. 从数组中删除区分大小写的值(仅保留小写值)
  3. 检查是否is_string($data)并在此情况下将$data值设置为strtolower($data)
  4. in_array的第三个参数设置为true(documentation
  5. 可选择添加输入值和结果的记录以供将来分析(即fputcsv($log, [$data, $result]),参见documentation

答案 1 :(得分:0)

我不确定您的aaaaa和AAAAA示例是否与案例无关。如果是这种情况,您可以尝试使用pre_grep()不敏感:

<?php 
function verBool($data) {
    $sale = "KO";
    $aceptados_true = array(1,"1","V","T","v","t","true","True","TRUE","verdadero","Verdadero","VERDADERO");
    $aceptados_false = array(0,"0","F","f","false","False","FALSE","falso","Falso","FALSO");
    if(preg_grep("/".$data."/i",$aceptados_true)) { $sale = "1"; }
    if(preg_grep("/".$data."/i",$aceptados_false)) { $sale = "0"; }
    return $sale;
}

echo verBool('verDadero');
?>