Php in_array - unexpected behavior

I don't know why this is happening, but my script cannot seem 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 have print_r $ demo, you can see that vid 22 is there, so I don’t understand why the status is not set accordingly?

  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 ) ) ) 

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

+4
source share
1 answer

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

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

 if(in_array($r['vid'], $set, false)) ... 
+2
source

Source: https://habr.com/ru/post/1305544/


All Articles