2012-12-19 71 views
1

我正在處理由遠程系統創作的CSV。我不想假設他們不會改變他們提供的字段或他們的順序,所以我解析CSV字段中索引的標題行並將它們映射到我可用於查找和更新的數組中。測試array_search的結果

事情是我做的方式測試對於指數零誤報:

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 
} 

什麼是更好的方式來做到這一點?

回答

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不等於TRUE,如果$ a不型雜耍後等於$ b

$ a!== $ b如果$ a不等於$ b或它們不是相同的類型,則不完全相同。

與您的代碼的問題是,if(0)被解釋爲if(0 != FALSE)。類型雜耍讓它將FALSE轉換爲整數0,而0 != 0顯然是錯誤的。與!==類型雜耍不會發生,所以0 !== FALSE是真實的(因爲它們不是相同的類型)。

我建議儘可能使用===!==,因爲它們更具可預測性,並且可預測的代碼往往不太麻煩並且易於使用。

+0

謝謝你的迴應!當我使用你的行時,我沒有得到我期望的結果,但是當我使用$ idx = array_search($ silverpop_field,$ fields);然後如果($ idx!== FALSE){按照我的希望工作。儘管我喜歡這種方法,但我不清楚爲什麼結果不起作用?還試着用TRUE而不是FALSE。 – jerrygarciuh

+0

@jerrygarciuh對不起,我混淆了'if'語句的工作方式(doh)。在這種情況下你需要'!=='。如果你做了if(($ idx = array_search($ silverpop_field,$ fields))!== FALSE)'它應該可以工作。 –

+0

完美!非常感謝。我會繼續使用===! – jerrygarciuh