5

从问题Type-juggling and (strict) greater/lesser-than comparisons in 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。这是正确的吗?

4

5 回答 5

6

A 在 9 之后。您可以在此字符串中看到这一点,从低到高排序。

0123456789abcdefghijklmnopqrstuvwxyz

所以 10 低于 1a。

于 2013-11-01T09:34:57.157 回答
4

这很容易1a不是数字。因此,PHP 比较大多数文本编码表string(2)"10"string(2)"1a"的数字在字母字符之前(查看ASCIIUTF-8字符表)。

所以1of10等于1of1a并且0of10小于aof 1a。这导致10低于1a

于 2013-11-01T09:31:48.060 回答
2

如果您想确定比较数字,请将 (type) 放在变量之前:

(int)"10" < (int)"1a"
(int)"1a" < (int)"2"
(int)"10" > (int)"2"
于 2013-11-01T09:35:32.957 回答
0

也许您首先需要使用正则表达式?

例如:

$str = '1a';
$str = preg_replace ("/[^0-9\s]/","", $str);
var_dump((int)$str); // int 1
于 2013-11-01T09:47:08.767 回答
-1

阅读此链接以了解比较两种不同数据类型的值时会发生什么。

使用类型杂耍来比较两种不同数据类型的值。

(int)"10" < (int)"1a"  result will be false
(int)"1a" < (int)"2"  result will be true
于 2013-11-01T09:36:47.837 回答