Как PHP сравнивает строки с операторами сравнения?

Я сравниваю строки с операторами сравнения.

Мне нужны краткие пояснения для двух приведенных ниже сравнений и их результатов.

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

output: No

Почему они выводят таким образом?

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

Output: Yes

Опять же почему?

Может быть, я забыл некоторые основы, но мне действительно нужно некоторое объяснение этих сравнительных примеров, чтобы понять этот вывод.

Ответ 1

PHP будет сравнивать альфа-строки с использованием операторов большего и меньшего, чем сравнение, в зависимости от алфавитного порядка.

В первом примере ai приходит до я в алфавитном порядке, поэтому проверкa > (больше) ложна - раньше в порядке считается "меньше", а не "больше".

Во втором примере ia появляется после я алфавитного порядка, поэтому проверкa > (больше) истинна - позже в порядке, который считается "больше".

Ответ 2

Чтобы расширить ответ на @coderabbi:

Это тот же тип логики, что и при заказе по номеру в некоторых приложениях и получения результатов, таких как:

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

Он не зависит от длины строки, а скорее от каждого символа в порядке строки.

Ответ 3

и > оператор сравнения в php будет сравнивать первый символ вашей строки, а затем сравнить другие символы, которые следует в строках. Таким образом, ваше первое выражение ai (первая строка) и я (вторая строка) a - это первый символ в строке по сравнению с я в качестве первого символа во второй строке s > будет возвращать 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 - количество символов, которое вы хотите сравнить с двумя строками.