比较数字字符串


Comparing numeric strings

来自问题 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 字符表)。

因此,101等于1a1100低于1aa。这导致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