我继承了一个非常古老的系统,它与许多其他系统交互,并且必须将其重写为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;
}
答案 0 :(得分:0)
在我看不到输入数据之前,我无法确切地说出错误。 但试着
true
和false
值is_string($data)
并在此情况下将$data
值设置为strtolower($data)
in_array
的第三个参数设置为true(documentation)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');
?>