Почему "echo strcmp ('60 ',' 100 ');" в выводе php 5? - PullRequest
12 голосов
/ 15 февраля 2012

Документация PHP по этой функции немного скудна, и я прочитал, что эта функция сравнивает значения ASCII, так что ...

echo strcmp('hello', 'hello');
//outputs 0 as expected - strings are equal.
echo '<hr />';

echo strcmp('Hello', 'hello');
//outputs -32, a negative number is expected as 
//uppercase H has a lower ASCII value than lowercase h.
echo '<hr />';

echo strcmp('60', '100');
//outputs 5.

Последний пример меня смущает.Я не понимаю, почему он выводит положительное число.

  • ASCII-значение 0 = 48
  • ASCII-значение 1 = 49
  • ASCIIЗначение 6 = 54

  • Общее значение ASCII '60' = (54 + 48) = 102

  • Общее значение ASCII '100' = (49 + 48 + 48) = 145

Функция strcmp () говорит, что «60» «больше», чем «100», даже если кажется, что значение ASCII и длина строки «100» больше, чем «60»

Кто-нибудь может объяснить, почему?

Спасибо

Ответы [ 3 ]

13 голосов
/ 15 февраля 2012

strcmp() возвращает разницу в первом несовпадающем символе между строками.

6 - 1 равно 5.

Когда вы смотрите на это, вывероятно, не видит символов или цифр - только цифры

8 голосов
/ 15 февраля 2012

Потому что strcmp() останавливается на первой найденной разнице.Отсюда разница между значением ASCII «1» и значением ASCII «6»

5 голосов
/ 15 февраля 2012

6 на 5 "больше", чем 1. Это лексическое сравнение.Первый символ отличается, на этом сравнение останавливается.

...