关于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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值