PHP in_array没有表现如预期

问题描述:

这里是我的功能:在这种情况下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

你去那里,你有尾随空白。删除它们,你会没事的。

+0

谢谢,尴尬的疏忽大声笑 – Alex 2011-04-24 17:49:39

+1

不客气。 ^^。不时偶尔会发生。这就是为什么我多年前放弃使用'print_r'并且只使用'var_dump'。无数次拯救了我...... – 2011-04-24 17:52:45

难道是有背后的换行符设置数组中的值?

检查你的getSettings函数,确保你修剪那里的值。

那么,print_r输出表明每行最后都包含一个额外的\n换行符。使用$file也表示您从文件中读取它。如果是这样,你只需要修剪输入。

您可以适应getSettings使用来阅读:

file($file, FILE_IGNORE_NEW_LINES) 

或后处理它在你的颜色测试功能:

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

确保您没有混合编码。

可能是一个解决办法:

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