PHP如何将字符串与比较运算符进行比较?

时间:2012-10-15 02:50:09

标签: php string compare operators type-coercion

我正在将字符串与比较运算符进行比较。

我需要对以下两个比较及其结果进行一些简短的解释。

if('ai' > 'i')
{
    echo 'Yes';
}
else
{
    echo 'No';
}

output: No

为什么这样输出?

if('ia' > 'i')
{
    echo 'Yes';
}
else
{
    echo 'No';
}

Output: Yes

再次,为什么?

也许我忘了一些基础知识,但我真的需要对这些比较例进行一些解释来理解这个输出。

4 个答案:

答案 0 :(得分:16)

PHP将使用大于和小于比较运算符的字母顺序比较alpha字符串。

  • 在第一个示例中,ai按字母顺序排在i之前,因此>(大于)的测试为false - 在订单的前面被认为是“小于”而不是“大于”。

  • 在第二个示例中,iai字母顺序排列,因此>(大于)的测试为true - 后续顺序为被认为是'大于'。

答案 1 :(得分:6)

扩展@ coderabbi的答案:

与在某些应用程序中按编号排序并获得如下结果的逻辑类型相同:

  • 0
  • 1
  • 105
  • 11
  • 2
  • 21
  • 3
  • 333
  • 34

它不是基于字符串长度,而是基于字符串的每个字符。

答案 2 :(得分:1)

php中的<>比较运算符将比较字符串的第一个字符,然后比较字符串中的其他字符。因此,您的第一个表达式ai(第一个字符串)和i(第二个字符串)a是字符串中的第一个字符,而第一个字符是>的第二个字符串中的第一个字符将返回false,然后是由于同样的原因,第二个陈述将返回true。但是,如果您确实需要将两个较长的字符串值与多个字符进行比较,则可以尝试使用substr_compare方法:

substr_compare("abcde", "bc", 1, 2);

在此示例中,您要比较两个字符串,1表示偏移开始位置,2表示要与这些字符串右侧比较的字符数。 -1表示从第一个字符串的结尾开始的偏移量。例如做这样的事情:

substr_compare("string1", "string2", 0, length);

另外,请考虑使用strcmp(),即strcmp("string1", "string2", length),其中length是您要从两个字符串中比较的字符数。

答案 3 :(得分:0)

当两个字符串都为数字格式时,PHP会将字符串转换为数字并转换值。

  

如果您将数字与字符串进行比较,或者比较涉及   数字字符串,然后将每个字符串转换为数字,然后   数值比较。这些规则也适用于交换机   声明。比较时不进行类型转换   是===或!==,因为这涉及比较类型以及   值。

引用https://www.php.net/manual/en/language.operators.comparison.php

编辑:格式化。

相关问题