1

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

事情是我这样做的方式测试索引为零的错误:

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
}

有什么更好的方法来做到这一点?

4

1 回答 1

2

array_search如果找到针,则返回一个整数,否则,请使用/ 不完全相同的运算符FALSE显式测试它:!==

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
}

以下是手册!=如何描述(不相等)和!==(不完全相同)(强调添加)之间的区别:

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

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

您的代码的问题是if(0)被解释为if(0 != FALSE). 类型杂耍让它将 FALSE 转换为整数 0,0 != 0显然是错误的。!==类型杂耍不会发生,所以是真的(因为0 !== FALSE它们不是同一类型)。

我建议尽可能使用===and ,因为它们更可预测,并且可预测的代码往往错误更少且更易于使用。!==

于 2012-12-19T23:23:02.947 回答