in_array在处理字符串时无法正常工作


in_array does not work correctly when dealing with strings

此代码:

var_dump(in_array("000", array(",00", ".00")));
var_dump(in_array("111", array(",11", ".11")));

输出:

bool(true)
bool(false)

为什么第一行返回true

这与PHP的类型强制有关。"000"基本上只转换为0。为了强制它使用严格的类型检查,in_array()接受第三个参数。

var_dump(in_array("000", array(",00", ".00"), true));

输出:

bool(false)

EDIT:@andrekeller还指出,".00"可能也被转换为int 0。这个故事的寓意是,不要相信PHP会正确处理类型。