【发布时间】:2010-03-30 12:56:15
【问题描述】:
不知道为什么会这样,但我的脚本似乎无法多次为 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...
【问题讨论】:
-
可能有一些空格或其他不可见的字符弄乱了代码。你可以使用
var_dump而不是print_r吗?它会在字符串周围加上引号并告诉我们变量的数量。 -
如果您在 'in_array' 行之前添加
var_dump($r['vid'], $set)- 它说明了什么? -
非常感谢...是的,$set 确实有一些不必要的空格,使用 trim 让它工作...谢谢!
-
通常,出于性能原因,我建议在
in_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; -
@Sterofrog 和 @n00b0101:建议将评论重新发布为答案并选择正确答案,这样问题就不会再出现在未回答的情况下。