php in_array - 意外行为

标签 php arrays

不确定为什么会这样,但我的脚本似乎无法多次为 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/

相关文章:

php - 如何使用循环连接 MySQL 日期类型和 PHP 日期类型

php - whereBetween Dates in laravel 4 Eloquent

Javascript 由于测试中出现双引号而失败

javascript - 有没有办法将对象中的值映射到 javascript 中的数组索引?

c++ - 指向多维数组的指针

php - Codeigniter:与子域和 sess_time_to_update 共享 session

PHP DOM 解析器移动关闭 Div 标记

javascript - 当在 JavaScript 中的另一个数组中获取匹配项时,从数组中删除元素

c - 我自己的自定义书面单词搜索算法的奇怪问题

java - 用俄罗斯方 block 填充整个 2D 阵列(俄罗斯方 block 板),没有剩余空间(Java)