现在是1和0比较出来是true,1和1比较出来是false,该怎么处理才能让结果符合预期呢?
还有个很奇怪的地方,$val明明值为1,但是却是一个非整型字符串,(int)$val的结果是0
现在是1和0比较出来是true,1和1比较出来是false,该怎么处理才能让结果符合预期呢?
还有个很奇怪的地方,$val明明值为1,但是却是一个非整型字符串,(int)$val的结果是0
请贴上你的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位數,估計裏面包含了 這些佔位符,根據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本身是數學上的函數。
2 回答1.3k 阅读✓ 已解决
1 回答966 阅读✓ 已解决
2 回答839 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
2 回答895 阅读
1 回答883 阅读
1 回答814 阅读
之前有遇到过接口返回数据长度多3个的情况,如果长度是固定的