问题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.这是正确的吗?
答案 0 :(得分:4)
很容易1a
不是数字。因此PHP将string(2)"10"
与string(2)"1a"
进行比较,数字在大多数文本编码表中的字母字符之前(查看ASCII或UTF-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