Comparing numeric strings

From the question Type-juggling and (strict) greater/lesser-than comparisons in PHP

I know PHP interpret strings as numbers whenever it can.

"10" < "1a"  => 10 less than 1      expecting  false 
"1a" < "2"   => 1 less than 2       expecting  true
"10" > "2"   => 10 greater than 2   expecting  true

But in the case of "10" < "1a" php returns true.

I am not understanding the concept please help me to clarify it.

Edit:

But when I add "10" + "1a" it returns 11 that means php interprets "10" as 10 and "1a" as 1. Is that correct?


It's easy 1a is not numeric. So PHP compares string(2)"10" against string(2)"1a" and numbers are before alpha characters in the most text encoding tables (have a look at the ASCII or UTF-8 character tables).

So 1 of 10 is equals 1 of 1a and 0 of 10 is lower than a of 1a . That results in 10 is lower than 1a .


A comes after 9. You can see this in this string, sorted from low to high.

0123456789abcdefghijklmnopqrstuvwxyz

So 10 is lower than 1a.


如果你想确定,比较数字,把(type)放在变量前面:

(int)"10" < (int)"1a"
(int)"1a" < (int)"2"
(int)"10" > (int)"2"
链接地址: http://www.djcxy.com/p/10036.html

上一篇: $ var不大于并且不小于字符长度

下一篇: 比较数字字符串