15

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

我需要对以下两个比较及其结果进行某种解释。

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

output: No

为什么这些输出是这样的?

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

Output: Yes

再说一遍,为什么?

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

4

4 回答 4

19

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

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

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

于 2012-10-15T02:57:26.153 回答
6

To expand on coderabbi's answer:

It is the same type of logic as when you order by number in some applications and get results like the following:

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

It's not based on string length, but rather each character in order of the string.

于 2012-10-15T03:04:52.780 回答
1

PHP 中的<and>比较运算符将比较字符串的第一个字符,然后比较字符串中的其他字符。

因此,您的第一个表达式ai(第一个字符串)和i(第二个字符串)a是字符串中的第一个字符,而i作为第二个字符串中的第一个字符>将 return false,随后第二个语句将返回true由于相同原因。

但是,如果您确实需要比较两个较长的字符串值与许多字符,您可以尝试使用substr_compare方法:

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

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

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

此外,还可以考虑使用 strcmp() ,即strcmp("string1", "string2", length)长度是要从两个字符串中比较的字符数。

于 2012-10-15T03:21:41.717 回答
1

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

如果将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都将转换为数字并以数字方式执行比较。这些规则也适用于 switch 语句。当比较是 === 或 !== 时不会发生类型转换,因为这涉及比较类型和值。

参考:比较运算符

于 2019-12-02T08:47:18.240 回答