PHP in_array踩坑记录 # 坑 前端传递type,后端根据type筛选不同的记录返回。 ```php //传递的type为字符串,也会进入if代码块内。 if (strlen($param['type']) != 0 && in_array($param['type'], [0, 1, 2, 3])) { $query->where('type', $param['type']); } ``` 原因是: 在字符串与含有数字的数组进行比较时。 假设要进行比较的变量为$a,数组为$b, in_array 会把$a与$b进行一一比较,如 $a==$b[0] , 此时,当$a为字符串,而数组中有元素为数字时,**php就会将$a数字化然后进行比较**,导致结果错误 道理其实很简单,但在平常的工作中却很容易忽视。 ```php //这样PHP不会将字符串强转为int。 if (strlen($param['type']) != 0 && in_array($param['type'], ['0', '1', '2', '3'])) { $query->where('type', $param['type']); } ```