不确定为什么会发生这种情况,但是我的脚本似乎无法多次返回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...
如果我打印 $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...。
var_dump
而不是print_r
吗?它会在字符串周围加上引号并告诉我们变量的数量。 - Samir Talwarin_array
($set = array_flip(explode(',', $saved)); ... if (isset($set[$r['vid']]))
), 但$set
是如此简短,这不会有太大的差异;对于仅有几个元素,使用in_array
可能甚至更快。另一种方法是在查询中设置状态:SELECT did,vid,iid,value, vid IN ($saved) AS status FROM demographicValues;
. - outis