关于in_array函数

   今天写一个分析sql的函数,需要把里面的字段值等分析出来。
   字符串好分析,就分析两端的引号即可, 数字(整数和浮点数)就有点麻烦了,用了一个简单的状态机。
   字符串的取得老早就正确了,但是数字的结果老是错误的,
   其实就是没取得数字,我就很纳闷,把if到符合数字部分的字符全打印了出来。
   结果除了前面正确截取的字符串段,其他的都打印出来了,我简直要怀疑我是不是echo的位置打错了。
   那地方的代码是这样
...
$digits=range(0,9);
...
if(in_array($w,$digits)){
...
}

于是我怀疑是in_array函数的问题,于是我做了个实验
echo in_array('s',range(0,9));//结果是1

果然是它的问题,所有字符都是返回true的...
于是我自己写了一个
function inarray($enum,$array){
  foreach($array as $e){
    if($e==$enum){
      return true;
    }
  }
  return false;
}

结果还是一样的,这时我突然想到会不会是比较的时候类型不同所致
做了一个实验
echo 's'+0;//结果是0

可以猜想,php在字符串和数字比较的时候自动把字符串转换成数字,然后比较数值。而非0-9的其他字符则会被转换为0,所以所有的字符都返回true了。
想到这点,我有了思路,把上面函数稍微修改下就好了
function inarray($enum,$array){
  foreach($array as $e){
    if(($e.'')==$enum){
      return true;
    }
  }
  return false;
}

你可能感兴趣的:(sql,PHP)