日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

[php] in_array 判断问题(坑)

發布時間:2023/12/10 php 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [php] in_array 判断问题(坑) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

<?php $arr = array("Linux"); if (in_array(0, $arr)) {echo "match"; } ?>

執行以上代碼,0和字符串是可以匹配成功的。

原因是在in_array,如果比較的類型不匹配,并且第一個參數是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(正確)

經查閱相關資料如下:

1.情況一

$test = 'a'; $array = array('a', 'b', 'c'); if (in_array($test, $array)) { echo 'in array'; } else {echo 'no'; } //output: in array

2.情況二

$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不在列表中,但是這個函數返回true。這個函數很常用,所以當某些巧合出現后,就會導致不可預料的錯誤。

一開始我猜測in_array函數除了在values中尋找,還會去尋找keys,后來發現不是這樣的。

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 -> true

php比較數字和字符串時,會嘗試將字符串轉換為數字再進行比較。 例子中的 'a', 'b', 'c' 轉成數字都是0,所以和0相等,in_array就返回了true。

6.如何避免

PHP的類型戲法是把雙刃劍,有時候很爽,有時候很賤。

所以當in_array的needle與array中的值類型是否相同還不確定時,最好設置in_array函數的第三個參數?strict = true,這樣在檢查的時候會檢查類型,數字與字符串就不會偷偷相等,也就避免類似這種問題。

$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

轉載于:https://www.cnblogs.com/Terry-Wu/p/7389768.html

總結

以上是生活随笔為你收集整理的[php] in_array 判断问题(坑)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。