开发者

php in_array - unexpected behavior

开发者 https://www.devze.com 2022-12-24 22:02 出处:网络
Not sure why this is happening, but my script doesn\'t seem to be able to return true for in_array more than once...

Not sure why this is happening, but my script doesn't seem to be able to return true for in_array more than once...

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

Then, I query the database:

$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...

If I print_r $demo, you can see that the vid 22 is in there, so, I'm not understanding why the status isn't being set accordingly?

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

                [16] => Array
                    (
                        [value] => Parish
                    )
        [Comp] => Array
            (
                [22] => Array
                    (
                      开发者_StackOverflow中文版  [value] => 65 - 70
                    )

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

)

Note that I also tried array_intersect and array_flip on $set, then isset...


By default in_array also checks the types. See the parameter strict at http://php.net/manual/en/function.in-array.php.

In your code $r['vid'] is an integer and the exploded string is still a string. So just use the same types or use:

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

精彩评论

暂无评论...
验证码 换一张
取 消