我正在比较带有比较运算符的字符串。
我需要对以下两个比较及其结果进行某种解释。
if('ai' > 'i')
{
echo 'Yes';
}
else
{
echo 'No';
}
output: No
为什么这些输出方式?
if('ia' > 'i')
{
echo 'Yes';
}
else
{
echo 'No';
}
Output: Yes
再说一遍,为什么?
也许我忘记了一些基础知识,但我真的需要对这些比较示例进行一些解释才能理解此输出。
PHP 将根据字母顺序使用大于和小于比较运算符比较字母字符串。
-
在第一个示例中,
ai
按字母顺序排在i
之前,因此>
(大于)的测试是false
- 顺序中的较早被视为"小于"而不是"大于"。 -
在第二个示例中,
ia
i
字母顺序之后,因此>
(大于)的测试是true
- 稍后的顺序被认为是"大于"。
扩展coderabbi的答案:
它与在某些应用程序中按编号排序并获得如下结果时的逻辑类型相同:
- 0
- 1
- 105
- 11
- 阿拉伯数字
- 21
- 3
- 333
- 34
它不是基于字符串长度,而是基于字符串顺序的每个字符。
PHP中的<
和>
比较运算符将比较字符串的第一个字符,然后比较字符串中后面的其他字符。
因此,您的第一个表达式ai(第一个字符串)和i(第二个字符串)a是字符串中的第一个字符,而i作为第二个字符串中的第一个字符,>
将返回false
,随后第二个语句将返回true
由于同样的原因。
但是,如果您确实需要比较两个具有许多字符的较长字符串值,则可以尝试使用 substr_compare 方法:
substr_compare("abcde", "bc", 1, 2);
在此示例中,您要比较两个字符串,1 是偏移量起始位置,2 表示要比较这些字符串右侧的字符数。 -1 将表示从第一个字符串的末尾开始的偏移量。 例如,做这样的事情:
substr_compare("string1", "string2", 0, length);
另外,考虑也使用 strcmp(),即strcmp("string1", "string2", length)
其中长度是您要从两个字符串中比较的字符数。
当两个字符串都是数字格式时,PHP 会将字符串转换为数字并转换值。
如果将数字与字符串进行比较,或者比较涉及 数字字符串,然后将每个字符串转换为一个数字和 以数字方式进行比较。这些规则也适用于交换机 陈述。比较时不进行类型转换 是 === 或 !==,因为这涉及比较类型以及 价值。
参考:比较运算符