2011-04-24 56 views
2

這裏是我的功能:在這種情況下PHP in_array沒有表現如預期

function checkArray($color,$file) { 
    $color = trim($color); 
    $settings = getSettings($file,1); 
    if (in_array($color,$settings)) return true; 
    else return false; 
} 

$設置是一個數組:

Array 
(

    [0] => Black 
    [1] => Blackpol 
    [2] => Blk 
    [3] => Blue 
    [4] => Bronz 
    [5] => Bronze 
    [6] => Brz 
) 

我有這個功能用$顏色參數循環幾次每次都在變化。樣本值是「黑色」,「藍色」等。長話短說,checkArray()應該很少返回false。然而,它每次都會返回錯誤,我不能爲我的生活找出原因。我嘗試不區分大小寫的搜索,修剪,打印單個輸出和比較字符串(「黑色」與「黑色」)...我不是新的PHP或數組,但我不明白爲什麼這可能會返回false。請幫助!

的print_r的$設置(if語句前右)$顏色

Array 
    (
    [0] => Black 

    [1] => Blackpol 

    [2] => Blk 

    [3] => Blue 

    [4] => Bronz 

    [5] => Bronze 

    [6] => Brz 

    [7] => Bz 

    [8] => Cherry 

    [9] => Gold 

    [10] => Gun 

    [11] => Gunmet 

    [12] => Gunmetal 

    [13] => Pol 

    [14] => Poly 

    [15] => Quentin 

    [16] => Rootbeer 

    [17] => Vis 
    ) 

VAR DUMP(右前if語句)

string(5) "Black" 
+4

在'if'語句之前執行'$ settings'和'$ color'的'var_dump'來仔細檢查變量值。你可能忽略了某些東西。 – 2011-04-24 17:34:31

+1

'$ settings'中有什麼。你可以傾倒它,並告訴我們? – PeeHaa 2011-04-24 17:34:52

+5

你真的應該只是'返回in_array($顏色,$設置);' – 2011-04-24 17:36:03

回答

2

你去那裏,你有尾隨空白。刪除它們,你會沒事的。

+0

謝謝,尷尬的疏忽大聲笑 – Alex 2011-04-24 17:49:39

+1

不客氣。 ^^。不時偶爾會發生。這就是爲什麼我多年前放棄使用'print_r'並且只使用'var_dump'。無數次拯救了我...... – 2011-04-24 17:52:45

1

難道是有背後的換行符設置數組中的值?

檢查你的getSettings函數,確保你修剪那裏的值。

1

那麼,print_r輸出表明每行最後都包含一個額外的\n換行符。使用$file也表示您從文件中讀取它。如果是這樣,你只需要修剪輸入。

您可以適應getSettings使用來閱讀:

file($file, FILE_IGNORE_NEW_LINES) 

或後處理它在你的顏色測試功能:

$settings = array_map("trim", $settings); 
0

確保您沒有混合編碼。

可能是一個解決辦法:

在琴絃
in_array(mb_strtolower($color, "UTF-8"), $settings)