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"
你去那里,你有尾随空白。删除它们,你会没事的。
谢谢,尴尬的疏忽大声笑 – Alex 2011-04-24 17:49:39
不客气。 ^^。不时偶尔会发生。这就是为什么我多年前放弃使用'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)
在'if'语句之前执行'$ settings'和'$ color'的'var_dump'来仔细检查变量值。你可能忽略了某些东西。 – 2011-04-24 17:34:31
'$ settings'中有什么。你可以倾倒它,并告诉我们? – PeeHaa 2011-04-24 17:34:52
你真的应该只是'返回in_array($颜色,$设置);' – 2011-04-24 17:36:03