【问题标题】:Comparing numeric strings比较数字字符串
【发布时间】:2013-11-12 11:49:06
【问题描述】:

来自问题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" &lt; "1a" 的情况下,php 返回 true。

我不理解这个概念,请帮我澄清一下。

编辑:

但是当我添加 "10" + "1a" 时,它返回 11,这意味着 php 将“10”解释为 10,将“1a”解释为 1。对吗?

【问题讨论】:

    标签: php


    【解决方案1】:

    A 在 9 之后。你可以在这个字符串中看到这个,从低到高排序。

    0123456789abcdefghijklmnopqrstuvwxyz
    

    所以 10 低于 1a。

    【讨论】:

    • 漂亮而简单。谢谢
    【解决方案2】:

    很容易1a 不是数字。所以 PHP 比较 string(2)"10"string(2)"1a" 并且数字在大多数文本编码表中位于字母字符之前(查看 ASCIIUTF-8 字符表)。

    所以101 等于1a1100 低于1aa。这导致10 低于1a

    【讨论】:

    • 我明白了。但是当添加它是另一个结果。请看我的编辑
    • 数学运算是另一只鞋,因为 PHP 不能添加两个字符串,而是比较两个字符串。这就是为什么如果你尝试添加它,PHP 会适当地从1a 中提取数字。 但是你永远不应该做这样的事情! 即使 PHP 不会将其视为错误 ;-)。这就是你如何在装满苹果的桶中添加一个梨。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      例如:

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

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

        • 这不是类型杂耍,这是类型转换。检查您链接到的页面,它位于不同的标题下。类型杂耍是 PHP 自动执行的操作,类型转换是当您明确告诉它要做什么时,例如使用(整数)。
        猜你喜欢
        • 2013-05-06
        • 2011-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多