За последние 24 часа нас посетили 48319 программистов и 1729 роботов. Сейчас ищут 704 программиста ...

strcmp, strcasecmp

Тема в разделе "PHP для новичков", создана пользователем kilogram, 10 апр 2012.

  1. kilogram

    kilogram Активный пользователь

    С нами с:
    19 мар 2012
    Сообщения:
    116
    Симпатии:
    0
    strcasecmp - проверяет на соотвествие двух строк с учетом регистра.
    strcmp - проверяет на соотвествие двух строк без учетом регистра.

    Код (Text):
    1. <?php
    2. if(strcasecmp('Vas','Vas')) echo 'hi!'; else
    3. echo 'bye ';
    4.  
    5. if(strcmp('vas','vas')) echo 'hi!'; else
    6. echo ' bye';
    7. ?>
    a)В первом ифе должно вывести hi! так как Левая строка Vas такая же как правая, но выводит почему то bye.
    b)Во втором ифе должно вывести h! так как 2 стоки одинаковы, но выводит опять bye, почему?
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    читайте мануал. если 0 то строки заданным сравнением равны. если не равны - будет либо положительно либо отрицательно
    у вас ноль и там и там
     
  3. kilogram

    kilogram Активный пользователь

    С нами с:
    19 мар 2012
    Сообщения:
    116
    Симпатии:
    0
    Спс, не заметил. А почему здесь не вводил проверок на ноль, а сравнил 2 с 1 и выдало hi?
    if(strcasecmp(2,1)) echo 'hi!'; else
    echo 'bye ';
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    2 != 1 ни как число ни как строка (символ) следовательно функция вернет ненулевой результат - int(1) - что станет признаком неравенства заданных аргументов. но для if это и есть то самое истинное что заставляет его показать hi
    сравните 1 и 2 - будет int(-1). это ноль? нет, значит мы снова увидим hi
    сравните любые равные аргументы - будет int(0) а для if'а это условие для выполнения чего? правильно - else-конструкции то есть bye
     
  5. kilogram

    kilogram Активный пользователь

    С нами с:
    19 мар 2012
    Сообщения:
    116
    Симпатии:
    0
    Прошу прощения, в документации написано.

    http://www.php.ru/manual/function.strcasecmp.html

    Написал так:
    Код (Text):
    1. if(strcasecmp("Петя","ПЕтя")) echo 'hi!'; else
    2. echo 'bye ';
    Здесь str1 меньше чем str2, но возвращает true, а не отрицательное число. Почему?
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    откуда дровишки?))))

    Код (PHP):
    1. var_dump(strcasecmp("Петя","ПЕтя")) 
    Код (Text):
    1. int(32)
    32 это ненулевое значение и приравнивается ифом к bool true
     
  7. kilogram

    kilogram Активный пользователь

    С нами с:
    19 мар 2012
    Сообщения:
    116
    Симпатии:
    0
    А понял прикол, по таблицу ACII приоритет смотрится, получается код заглавной буквы меньше чем маленькой, то есть Петя>ПЕтя и поэтому возвращает тру.
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    да, именно так строки и сравниваются)))
    только aScii эта табличка называется