使用in array時遇到的乙個bug

2022-06-18 07:57:10 字數 983 閱讀 6249

說實話這個bug讓我有點意外

$sn = '123-1';

$arr =[

'123' => 12,

'321' => 31];

要判斷$sn 作為key 是否在$arr 裡面

正常操作

if ( in_array($sn, array_keys($arr

)) )

else

一切看起來就是那麼完美

但是 但是 但是 報出乙個異常 索引不存在

通過各種日誌 最終發現 if 判斷中 返回乙個true

通過測試發現 array_keys 在獲取陣列的key時 如果陣列的key為數字型字串 則會自動轉為數字

字串在和數字做是否相等的比較的時候 有優先將字串轉化為數字

所以事故就出現了

array_keys($arr)//

結果為[

123,

321]

'123-1' == 123 //

返回 true

因為 (int)'123-1' = 123

解決方法

in_array() 方法中還有第三個引數 

in_array ( mixed

$needle , array

$haystack [, bool $strict = false ] ) :bool

//將第三個引數 設定為 true

昨晚失眠

突然想了一下

我去不行啊 如果是強型別校驗 字串和數字匹配不上啊

所以還是換種寫法吧

if ( !empty($arr[$sn

]) )

else

最終還是 array_keys 的鍋

如果key是數字型字串 在使用array_keys 時 數字型字串會自動轉為數字

return 時遇到的乙個問題

今天做業務時遇到了乙個問題 我公司 上游公司 需要接收到 下游公司返回 return 的乙個字串 string string notify 我公司 上游公司 接收到的字串 業務 當我公司 上游公司 接收到下游返回的是 keyi 時,system.out.println 成功 否則,system.ou...

使用docker toolbox遇到的乙個問題

docker pull nginx 然後run起來了,但是在真機上訪問不到nginx,我記著明明埠對映是做好了的 docker run d p 8080 80 nginx 但是在瀏覽器上輸入localhost 8080就是打不開nginx的歡迎頁,原來是docker toolbox使用的是vbox虛...

學習js時遇到的乙個問題

今天在慕課網學習完成後的乙個綜合性程式設計裡遇到了乙個問題。是滑鼠移到 不同行上時背景色改為色值為 f2f2f2,移開滑鼠時則恢復為原背景色 fff時遍歷迴圈後發生了style 未定義的問題。以下貼出錯誤 學號姓名 操作 xh001 王小明刪除 xh002 劉小芳刪除 在處理滑鼠移動改變背景這裡時出...