ani*_*son 5 php arrays boolean
我在使用PHP函数时发现了一些奇怪的行为in_array().我有这样一个数组:
$arr = [TRUE, "some string", "something else"];
Run Code Online (Sandbox Code Playgroud)
现在,如果我想检查是否"test"在数组中它显然不是,但in_array()仍然返回TRUE,为什么呢?
$result = in_array("test", $arr);
var_dump($result); //Output: bool(true)
Run Code Online (Sandbox Code Playgroud)
使用时会发生同样的事情array_search():
$result = array_search("test", $arr);
var_dump($result); //Output: int(0)
Run Code Online (Sandbox Code Playgroud)
我想也许数组中的值TRUE会自动导致函数为每个结果返回TRUE,而不检查数组的其余部分,但我找不到任何可能表明非常奇怪的功能的文档.
该函数的这种行为in_array()而array_search()不是一个错误,而是有据可查的行为.
这两个函数都有一个第三个可选参数$strict,默认情况下为FALSE:
bool in_array(混合$ needle,数组$ haystack [,bool $ strict = FALSE])
mixed array_search(mixed $ needle,array $ haystack [,bool $ strict = false])
现在这意味着默认情况下两个函数都使用松散(==)比较来比较值.所以他们只检查PHP类型杂乱后的值是否相同,而不检查类型.因为在您的示例中,TRUE == "any none emtpy string"计算结果为TRUE.
因此,通过在调用函数时将第3个参数设置为TRUE,您说PHP应该使用strict(===)比较,并且它应该在比较时检查值的值和类型.
请参阅此参考:PHP等式(== double equals)和identity(=== triple equals)比较运算符有何不同?
| 归档时间: |
|
| 查看次数: |
1739 次 |
| 最近记录: |