近期做项目,发现使用array_search出现的问题——搜索出错,元素分明有在数组中,但给出的结果是FALSE!
操作逻辑如下
从数据库中取出符合条件的字符串的用户id合集
使用foreach遍历这些对象
将对象中的字符串使用explode函数变为数组
查找用户id是否位于这些数组中,如果有,则数量加一
用于遍历的对象data
array(6) {
[0]=>
array(1) {
["points_uid"]=>
string(5) "4,2,6"
}
[1]=>
array(1) {
["points_uid"]=>
string(9) "2,4,6,7,5"
}
[2]=>
array(1) {
["points_uid"]=>
string(10) "8,12,17,19"
}
[3]=>
array(1) {
["points_uid"]=>
string(1) "2"
}
[4]=>
array(1) {
["points_uid"]=>
string(3) "2,5"
}
[5]=>
array(1) {
["points_uid"]=>
string(1) "2"
}
}
逻辑代码
$sql="SELECT uid From table where time between time1 and time2";
$data=$obj->fetchAll($sql);//从数据库拿数据
$hire_counts=0;
foreach ($data as $key=>$arr){
echo $key."--";
echo $arr["points_uid"]."<br>";
if(array_search(2,explode(",",$arr["points_uid"]))){
echo "OK<br>";
$hire_counts++;
}else{
echo "NO<br>";
}
}
输出的结果
0--4,2,6
OK
1--2,4,6,7,5
NO
2--8,12,17,19
NO
3--2
NO
4--2,5
NO
5--2
NO
这是一个很奇怪的事情,2在后面的元素中多次出现,但均报出NO。
修改代码
将array_search()改为in-array()后问题解决
$sql="SELECT uid From table where time between time1 and time2";
$data=$obj->fetchAll($sql);//从数据库拿数据
$hire_counts=0;
foreach ($data as $key=>$arr){
echo $key."--";
echo $arr["points_uid"]."<br>";
if(in_array(2,explode(",",$arr["points_uid"]))){
echo "OK<br>";
$hire_counts++;
}else{
echo "NO<br>";
}
}
输出结果
0--4,2,6
OK
1--2,4,6,7,5
OK
2--8,12,17,19
NO
3--2
OK
4--2,5
OK
5--2
OK
问题解决
为什么array_search()给出了奇怪的结果呢?
其实它没有错,错在if语句——if判断中,如果值为0,会被判定为FALSE,而此前的输出中,结果是NO的部分,2都出现在第一个,array_search()返回值是0,因此被if语句判定为FLASE!