【PHP】如何处理才能让如下结果符合预期呢?

clipboard.png

clipboard.png
现在是1和0比较出来是true,1和1比较出来是false,该怎么处理才能让结果符合预期呢?

还有个很奇怪的地方,$val明明值为1,但是却是一个非整型字符串,(int)$val的结果是0

阅读 2.6k
3 个回答

之前有遇到过接口返回数据长度多3个的情况,如果长度是固定的

if (strlen($val) > 1){
    $val = substr($val,13);
}

请贴上你的PHP版本,我在PHP5.6版本下测试
这是我的测试
图片描述

以下是我的测试结果
图片描述

如果是因为==会进行转化,你可以考虑===全等来判断类型和值,
例如

'1' === 1 //false
'1' === (string)1  // true

如果是因为如果是包含其他多余字符,建议你用trim方法来去除一下多余的字符串

怎麼重覆提問了-.-順便把裏面的答案更正一下
https://segmentfault.com/q/10...

PHP 跟其他語言(如java)的一個不同的地方是php用 $ 就可以存取全部類型,而java 使用int或string或其他都要聲明為int或string等...

所以php在做 == 比較運算時在某情況下會自動做隱式處理,你例子裏是int 和 string作比較,php會忽略類型比較並且把string的值轉換成0。

你這個例子的string是14位數,估計裏面包含了&nbsp這些佔位符,根據PHP的規則,這個string(14)"1" 會隱式轉換成string(1)0,而當你的$val 也是int(0)時,因為只比較數值,自然返回true了。

不過官方未可能沒有提及到的情況是,當string的第1位是數字時,比如string(2)"1a" 不會把1a轉換成0,只有第1位是非數字時才會轉換成0,如string(2)"a1" 會變成0。

但是注意string(3)"1e0" (1e0 ~ 1e9),則會轉換成string(1)"1" (1 ~ 1000000000) ,因為1e本身是數學上的函數。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题