Как 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:
Это тот же тип логики, что и при заказе по номеру в некоторых приложениях и получения результатов, таких как:
Он не зависит от длины строки, а скорее от каждого символа в порядке строки.
Ответ 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 - количество символов, которое вы хотите сравнить с двумя строками.