php in_array – 意外行为

不知道为什么会发生这种情况,但我的脚本似乎不能多次为in_array返回true …

$saved = '15,22';    
$set = explode(",",$saved); //results in Array ( [0] => 15 [1] => 22 ) 

然后,我查询数据库:

$result = pg_query("SELECT did,vid,iid,value FROM demographicValues");
if(pg_num_rows($result) > 0) {
  while($r = pg_fetch_array($result)) {
     $demo[$r['did']][$r['vid']]['value'] = $r['value'];
     if(in_array($r['vid'], $set)) {
       $demo[$r['did']][$r['vid']]['status'] = 1;
     }
  }
} else...

如果我print_r $demo,你可以看到vid 22在那里,所以,我不明白为什么没有相应地设置状态?

    Array
    (
        [Mant] => Array
            (
                [15] => Array
                    (
                        [value] => Proper
                        [checked] => 1
                    )

                [16] => Array
                    (
                        [value] => Parish
                    )
        [Comp] => Array
            (
                [22] => Array
                    (
                        [value] => 65 - 70
                    )

                [23] => Array
                    (
                        [value] => 35 - 50
                    )
        )

)

请注意,我也在$set上尝试了array_intersect和array_flip,然后是isset …

最佳答案 默认情况下,in_array还会检查类型.

请参阅
http://php.net/manual/en/function.in-array.php中的参数strict.

在你的代码中,$r [‘vid’]是一个整数,爆炸的字符串仍然是一个字符串.所以只需使用相同的类型或使用:

if(in_array($r['vid'], $set, false)) ...
点赞