PHP in_array表现不如预期

时间:2011-04-24 17:32:38

标签: php arrays

这是我的功能:

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

此上下文中的$ settings是一个数组:

Array
(

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

我让这个函数循环几次,每次更改$ color参数。样本值为“黑色”,“蓝色”等。长话短说,checkArray()应该返回false很少次。

但是,它每次都会返回错误,我无法为我的生活找出原因。我尝试了不区分大小写的搜索,修剪,打印单个输出和比较字符串(“黑色”与“黑色”)...我不是新的PHP或数组但我无法弄清楚为什么这可能会返回false。请帮助!

$ settings的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 OF $ color(在if语句之前)

string(5) "Black"

4 个答案:

答案 0 :(得分:2)

你去了,你的字符串中有空格。删除它们你就没事了。

答案 1 :(得分:1)

可能是设置数组中的值后面有换行符吗?

检查你的getSettings函数,确保你也修剪它们。

答案 2 :(得分:1)

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

您可以使用以下内容调整getSettings以进行阅读:

file($file, FILE_IGNORE_NEW_LINES)

或者在色彩测试功能中对其进行后处理:

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

答案 3 :(得分:0)

确保您没有混合编码。

这个可能是一个解决方案:

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