不确定为什么会这样,但我的脚本似乎无法多次为 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...
如果我打印_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)) ...
关于php in_array - 意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2545279/