来自问题 PHP 中的类型杂耍和(严格)大于/小于比较
我知道PHP尽可能将字符串解释为数字。
"10" < "1a" => 10 less than 1 expecting false
"1a" < "2" => 1 less than 2 expecting true
"10" > "2" => 10 greater than 2 expecting true
但在"10" < "1a"
的情况下,php 返回 true。
我不明白这个概念,请帮我澄清一下。
编辑:
但是当我添加"10" + "1a"
它返回 11 时,这意味着 php 将"10"解释为 10,将"1a"解释为 1。这是对的吗?
A 排在 9 之后。你可以在这个字符串中看到这一点,从低到高排序。
0123456789abcdefghijklmnopqrstuvwxyz
所以 10 低于 1a。
很容易1a
不是数字。因此,PHP 将string(2)"10"
与string(2)"1a"
进行比较,并且在大多数文本编码表中,数字在字母字符之前(请查看 ASCII 或 UTF-8 字符表)。
因此,10
的1
等于1a
的1
,10
的0
低于1a
的a
。这导致10
低于1a
。
如果你想确定你比较数字,把(type)放在变量之前:
(int)"10" < (int)"1a"
(int)"1a" < (int)"2"
(int)"10" > (int)"2"
也许您首先需要使用正则表达式?
例如:
$str = '1a';
$str = preg_replace ("/[^0-9's]/","", $str);
var_dump((int)$str); // int 1
阅读此链接以获取比较两种不同数据类型的值时会发生什么。
使用类型杂耍来比较两种不同数据类型的值。
(int)"10" < (int)"1a" result will be false
(int)"1a" < (int)"2" result will be true