strcmp,strcasecmp
strcasecmp - проверяет на соотвествие двух строк с учетом регистра.
strcmp - проверяет на соотвествие двух строк без учетом регистра. <?php if(strcasecmp('Vas','Vas')) echo 'hi!'; else echo 'bye '; if(strcmp('vas','vas')) echo 'hi!'; else echo ' bye'; ?> a)В первом ифе должно вывести hi! так как Левая строка Vas такая же как правая, но выводит почему то bye. b)Во втором ифе должно вывести h! так как 2 стоки одинаковы, но выводит опять bye, почему? |
if (strcasecmp('Vas','Vas') == 0){ echo('Hi'); } else{ echo('bye'); } |
либо
if (!strcasecmp('Vas','Vas')){ echo('Hi'); } else{ echo('bye'); } upd: так делать не рекомендуется :) если первая строка короче — сработает условие.. лучший и правильный вариант с ==0. функции strcasecmp и strcmp в случае, если строки идентичны возвращают ноль.. в условиях ноль — это false. |
А почему здесь не вводил проверок на ноль, а сравнил 2 с 1 и выдало hi?
if(strcasecmp(2,1)) echo 'hi!'; else echo 'bye '; |
если первая строка "больше" (длиннее, либо приоритет символов больше) второй — возвращается единица (т.е. true для условия), поэтому и выполнилось.
в целом так: если A > B strcasecmp(A,B) = 1 если A < B strcasecmp(A,B) = -1 если A = B strcasecmp(A,B) = 0 |
Прошу прощения, в документации написано.
Цитата:
Написал так: if(strcasecmp("Петя","ПЕтя")) echo 'hi!'; else echo 'bye '; Здесь str1 меньше чем str2, но возвращает true, а не отрицательное число. Почему? |
сравнение бинарное, по кодам символов у прописной кириллицы приоритет над строчной :) т.е буквы в нижнем регистре на 32 позиции выше, чем буквы в верхнем.
любое сравнение одинаковых буквы в нижнем и верхнем регистрах будет равно 32 :) (если сравнить строчную с прописной, то -32 соответственно) а 32 > 0, и соответственно = true :) |
А понял прикол, по таблицу ACII приоритет смотрится, получается код заглавной буквы меньше чем маленькой, то есть Петя>ПЕтя и поэтому возвращает тру, спс.
|
Цитата:
|
Часовой пояс GMT +3, время: 10:39. |