测试array_search的结果

时间:2012-12-19 23:20:00

标签: php arrays

我正在处理由远程系统创作的CSV。我不想假设他们不会改变他们提供的字段或他们的顺序,所以我解析字段CSV中的索引的标题行,并将它们映射到我可以用于查找和更新的数组。

我正在做的事情是对零指数测试false:

foreach ($field_map_array as $local_field => $silverpop_field) {
    if ($idx = array_search($silverpop_field, $fields)) {
        $local_to_sp[$local_table][$local_field] = $idx;
    } // index found
}

有什么更好的方法呢?

1 个答案:

答案 0 :(得分:2)

array_search如果找到针头则返回一个整数,否则返回FALSE,因此使用!== / not identical operator显式测试它:

foreach ($field_map_array as $local_field => $silverpop_field) {
    if (($idx = array_search($silverpop_field, $fields)) !== FALSE) {
        $local_to_sp[$local_table][$local_field] = $idx;
    } // index found
}

以下是the manual描述!=(不等于)和!==(不相同)之间差异的方法(强调添加):

  

$ a!= $ b如果在类型杂耍之后$ a不等于$ b ,则不等于TRUE。

     

$ a!== $ b如果$ a不等于$ b,或者它们的类型不同,则不一样。

您的代码存在的问题是if(0)被解释为if(0 != FALSE)。类型juggling允许它将FALSE转换为整数0,而0 != 0显然是假的。使用!==类型时,不会发生杂乱,因此0 !== FALSE为真(因为它们的类型不同)。

我建议尽可能使用===!==,因为它们更具可预测性,而且可预测的代码往往更少,更容易使用。