За последние 24 часа нас посетили 93257 программистов и 3020 роботов. Сейчас ищут 1419 программистов ...

Независимость регистра

Тема в разделе "PHP для новичков", создана пользователем Sasha55555, 13 ноя 2018.

  1. Sasha55555

    Sasha55555 Новичок

    С нами с:
    18 мар 2018
    Сообщения:
    152
    Симпатии:
    0
    Как сделать чтобы переменная со значением - буква была равна переменной Буква, или Ёж и еж
     
  2. AlexandrS

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

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Как сделать чтобы 5000 руб были равны 100 руб?
    Условие будет ИСТИНА если обе части этого условия равны.
     
  3. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    вообще не рядом
    перед сравнением привести обе переменные к "общему знаменателю"

    или использовать соответствующие функции
    PHP:
    1. $a = 'Ёж';
    2. $b = 'еж';
    3.  
    4. if ( strnatcasecmp( $a,$b ) ) echo $a .' = ' .$b; else echo $a .' <> ' .$b;
     
    #3 Valick, 14 ноя 2018
    Последнее редактирование: 14 ноя 2018
  4. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.132
    Симпатии:
    1.251
    Адрес:
    там-сям
    @Sasha55555 перед сравнением привести обе строки к одному регистру. Или найти функцию которая внутри делает это за тебя: меняет регистр и сравнивает.

    Ты столкнешся с тем, что изменение регистра не всегда работает так как ты ожидаешь. Потому что есть разные кодировки. Но это уже другая тема.
     
  5. AlexandrS

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

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Ну как это не рядом? Всё более чем рядом. Для машины что 5000 и 100 не будут истиной в равенстве, что Еж и ёж не будут таковыми. Или я что-то не понимаю? Я показал наглядный пример.
    Ты ведь сам пишешь что нужно привести к "общему знаменателю". Т.е. либо от 5000 отнять 4900, либо к 100 добавить 4900.
    Так и с буквами , либо ты правую часть подгоняешь под левую, либо левую под правую.
     
  6. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    нет
     
  7. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.132
    Симпатии:
    1.251
    Адрес:
    там-сям
  8. AlexandrS

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

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Если "НЕТ" то поясни.
     
  9. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @AlexandrS, не подгонять одно значение под другое, а произвести над обоими значениями одно и то же действие после которого эти значения станут или не станут равны.
     
  10. AlexandrS

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

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    ОК! Касаемо "подогнать" и "произвести над обоими значениями одно и то же действие". Я сделаю одно и тоже действие над 5000 и 100 и они будут равны. Умножу их на ноль.
    Кроме этого в этих словах есть не то что буквы с разным регистром, но и вообще разные буквы. е, ё.
     
  11. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    если устроит результат, то умножайте
    в программировании есть такое понятие как "маска"
    для решения поставленной задачи подходит штатная функция strnatcasecmp
    если она по каким-то причинам не устраивает, то можно изобретать свой велосипед
     
  12. MRSgiba

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

    С нами с:
    22 дек 2017
    Сообщения:
    200
    Симпатии:
    32
    @Valick Сомнительный не работающий пример, притянутый зауши. Функция даже судя по описанию не так работать как вы ее тут используете. Сравните две одинаковых строки вашим методом.
     
  13. AlexandrS

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

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    И в этой функции еж и Ёж будут равны?
     
  14. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.132
    Симпатии:
    1.251
    Адрес:
    там-сям
    Есть справка по функции - доступна по клику, когда синтаксис выделен :)

    Читаем:
    Возвращаемые значения
    ... 0, если строки равны.

    0 интерпретируется как "ложь". То есть, чтобы поймать случай когла строки равны, надо писать if( ... == 0)
    Но это, сука, ещё не всё! Т.к. есть разные кодировки, не факт, что функция справится. Я уверен, что с мультибайтными кодировками она работает некорректно, а для однобайтных надо выставить правильную локаль.

    Тот случай когда свой "костыль" из нескольких вызовов mb_* лучше.
    Творите!
     
  15. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @MRSgiba, согласен, поспешил с функцией.
     
  16. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    Нормальная ситуация.
    Пердусматривается три варианта результата, как и в других подобных функциях сравнения/ранжирования (strcmp, второй аргумент для usort) :)
     
  17. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.132
    Симпатии:
    1.251
    Адрес:
    там-сям
    Бл*ть )))) вот как ни старайся, всё равно кто-то извернётся и поймёт тебя превратно.
    --- Добавлено ---
    Кто-то сказал, что функция "ненормальная", @Sail? Важен контекст. Функцию надо правильно использовать. Теперь почитай всю тему с начала.

    Я устал и ухожу :)
     
  18. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    Именно! Вот эта конкретная "мелочь" к контексту никакого отношения и не имеет.
    Просто минус один агрумент, не актуальный в контексте темы. :cool:
     
  19. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    В 99.9% случаев обычное сравнение с приведением к одному регистру выдаст именно тот результат, который нужен.
    Не доверяете простому сравнению с приведением регистра? Окееей, сравнивайте через замер расстояния Левенштейна. Или считайте степень похожести двух строк. Но тоже к регистру одному привести надо.

    Но...обычного сравнения после приведения регистра должно хватить всем.
     
    #19 Fell-x27, 15 ноя 2018
    Последнее редактирование: 15 ноя 2018
    MRSgiba нравится это.