我正在处理由远程系统创作的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
}
有什么更好的方法呢?
答案 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
为真(因为它们的类型不同)。
我建议尽可能使用===
和!==
,因为它们更具可预测性,而且可预测的代码往往更少,更容易使用。