PHP strcasecmp с пустой строкой равен true? - PullRequest
2 голосов
/ 20 июня 2011

В основном у меня есть код:

echo strcasecmp('hello', ' ') ? 'true' : 'false';

Я не совсем понимаю, я ожидаю, что результат здесь будет ложным и не верным, потому что строка не равна ...

Есть ли другой лучший способ сравнить строки в случае НЕНАЖИТЕЛЬНОГО случая?

Ответы [ 3 ]

10 голосов
/ 20 июня 2011

С http://php.net/manual/en/function.strcasecmp.php

int strcasecmp (строка $ str1, строка $ str2)

Возвращает <0, если str1 меньше, чем str2;> 0, если str1 больше, чем str2, и 0, если они равны.

Вам нужно сделать это как

echo strcasecmp('hello', ' ') == 0 ? 'true' : 'false';
3 голосов
/ 20 июня 2011

Это должно быть

echo (strcasecmp('hello', ' ') === 0) ? 'true' : 'false';

strcasecmp возвращает 0, если обе строки равны.

http://uk3.php.net/strcasecmp

1 голос
/ 20 июня 2011

Вы неправильно интерпретируете результаты. То, что strcasecmp возвращает, согласно документам - это число, не равное нулю, если строки неравны, и ноль, если они равны. Как известно, в PHP ноль соответствует false, а ненулевой соответствует true. Таким образом, правильная версия вашего теста

echo (strcasecmp('hello', ' ') === 0) ? 'true' : 'false';

или, альтернативно,

echo strcasecmp('hello', ' ') ? 'false' : 'true';

из которых я предпочитаю первый, более подробный и не содержащий каких-либо неявных преобразований типов в логические значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...