比较数字字符串

时间:2013-11-01 09:28:42

标签: php

问题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.这是正确的吗?

5 个答案:

答案 0 :(得分:4)

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

因此1的{​​{1}}等于10的{​​{1}}且1的{​​{1}}低于1a { {1}}。这导致0低于10

答案 1 :(得分:4)

A来自9.您可以在此字符串中看到此内容,从低到高排序。

0123456789abcdefghijklmnopqrstuvwxyz

所以10低于1a。

答案 2 :(得分:1)

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

(int)"10" < (int)"1a"
(int)"1a" < (int)"2"
(int)"10" > (int)"2"

答案 3 :(得分:0)

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

例如:

$str = '1a';
$str = preg_replace ("/[^0-9\s]/","", $str);
var_dump((int)$str); // int 1

答案 4 :(得分:-1)

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

使用type juggling比较两种不同数据类型的值。

(int)"10" < (int)"1a"  result will be false
(int)"1a" < (int)"2"  result will be true