[php] in_array 判断问题(坑)
?
<?php $arr = array("Linux"); if (in_array(0, $arr)) {echo "match"; } ?>執(zhí)行以上代碼,0和字符串是可以匹配成功的。
原因是在in_array,如果比較的類型不匹配,并且第一個參數(shù)是0,它會返回true(不正確)。
查手冊:If the third parameter?strict?is set to?TRUE?then the?in_array()?function will also check thetypes?of theneedle?in thehaystack. ?
加上類型比較后返回false(正確)
經(jīng)查閱相關資料如下:
1.情況一
$test = 'a'; $array = array('a', 'b', 'c'); if (in_array($test, $array)) { echo 'in array'; } else {echo 'no'; } //output: in array2.情況二
$test = 'other value'; $array = array('a', 'b', 'c'); if (in_array($test, $array)) { echo 'in array'; } else {echo 'no'; } //output: no
------------------------ 看似一切都正常的分割線 -----------------------
3.情況三
$test = 0; $array = array('a', 'b', 'c'); if (in_array($test, $array)) {echo 'in array'; } else {echo 'no'; } //output: in array難以置信,這不坑爹嗎,0不在列表中,但是這個函數(shù)返回true。這個函數(shù)很常用,所以當某些巧合出現(xiàn)后,就會導致不可預料的錯誤。
一開始我猜測in_array函數(shù)除了在values中尋找,還會去尋找keys,后來發(fā)現(xiàn)不是這樣的。
4.情況四
$test = '0'; $array = array('a', 'b', 'c'); if (in_array($test, $array)) {echo 'in array'; } else {echo 'no'; } //output: no是不是很有意思
5.原來是因為:
http://www.php.net/manual/en/language.operators.comparison.php
var_dump(0 == "a"); // 0 == 0 -> true var_dump("1" == "01"); // 1 == 1 -> true var_dump("10" == "1e1"); // 10 == 10 -> true var_dump(100 == "1e2"); // 100 == 100 -> truephp比較數(shù)字和字符串時,會嘗試將字符串轉(zhuǎn)換為數(shù)字再進行比較。 例子中的 'a', 'b', 'c' 轉(zhuǎn)成數(shù)字都是0,所以和0相等,in_array就返回了true。
6.如何避免
PHP的類型戲法是把雙刃劍,有時候很爽,有時候很賤。
所以當in_array的needle與array中的值類型是否相同還不確定時,最好設置in_array函數(shù)的第三個參數(shù)?strict = true,這樣在檢查的時候會檢查類型,數(shù)字與字符串就不會偷偷相等,也就避免類似這種問題。
$test = 0; $array = array('a', 'b', 'c'); if (in_array($test, $array, true)) {echo 'in array';} else {echo 'no'; } //output: no
原文鏈接:http://blog.csdn.net/edwingu/article/details/8876981
轉(zhuǎn)載于:https://www.cnblogs.com/Terry-Wu/p/7389768.html
總結
以上是生活随笔為你收集整理的[php] in_array 判断问题(坑)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java简历模板
- 下一篇: 第五届全国大学生GIS应用技能大赛开发题