Как сделать чтобы 5000 руб были равны 100 руб? Условие будет ИСТИНА если обе части этого условия равны.
вообще не рядом перед сравнением привести обе переменные к "общему знаменателю" или использовать соответствующие функции PHP: $a = 'Ёж'; $b = 'еж'; if ( strnatcasecmp( $a,$b ) ) echo $a .' = ' .$b; else echo $a .' <> ' .$b;
@Sasha55555 перед сравнением привести обе строки к одному регистру. Или найти функцию которая внутри делает это за тебя: меняет регистр и сравнивает. Ты столкнешся с тем, что изменение регистра не всегда работает так как ты ожидаешь. Потому что есть разные кодировки. Но это уже другая тема.
Ну как это не рядом? Всё более чем рядом. Для машины что 5000 и 100 не будут истиной в равенстве, что Еж и ёж не будут таковыми. Или я что-то не понимаю? Я показал наглядный пример. Ты ведь сам пишешь что нужно привести к "общему знаменателю". Т.е. либо от 5000 отнять 4900, либо к 100 добавить 4900. Так и с буквами , либо ты правую часть подгоняешь под левую, либо левую под правую.
@AlexandrS, не подгонять одно значение под другое, а произвести над обоими значениями одно и то же действие после которого эти значения станут или не станут равны.
ОК! Касаемо "подогнать" и "произвести над обоими значениями одно и то же действие". Я сделаю одно и тоже действие над 5000 и 100 и они будут равны. Умножу их на ноль. Кроме этого в этих словах есть не то что буквы с разным регистром, но и вообще разные буквы. е, ё.
если устроит результат, то умножайте в программировании есть такое понятие как "маска" для решения поставленной задачи подходит штатная функция strnatcasecmp если она по каким-то причинам не устраивает, то можно изобретать свой велосипед
@Valick Сомнительный не работающий пример, притянутый зауши. Функция даже судя по описанию не так работать как вы ее тут используете. Сравните две одинаковых строки вашим методом.
Есть справка по функции - доступна по клику, когда синтаксис выделен Читаем: Возвращаемые значения ... 0, если строки равны. 0 интерпретируется как "ложь". То есть, чтобы поймать случай когла строки равны, надо писать if( ... == 0) Но это, сука, ещё не всё! Т.к. есть разные кодировки, не факт, что функция справится. Я уверен, что с мультибайтными кодировками она работает некорректно, а для однобайтных надо выставить правильную локаль. Тот случай когда свой "костыль" из нескольких вызовов mb_* лучше. Творите!
Нормальная ситуация. Пердусматривается три варианта результата, как и в других подобных функциях сравнения/ранжирования (strcmp, второй аргумент для usort)
Бл*ть )))) вот как ни старайся, всё равно кто-то извернётся и поймёт тебя превратно. --- Добавлено --- Кто-то сказал, что функция "ненормальная", @Sail? Важен контекст. Функцию надо правильно использовать. Теперь почитай всю тему с начала. Я устал и ухожу
Спойлер Именно! Вот эта конкретная "мелочь" к контексту никакого отношения и не имеет. Просто минус один агрумент, не актуальный в контексте темы.
В 99.9% случаев обычное сравнение с приведением к одному регистру выдаст именно тот результат, который нужен. Не доверяете простому сравнению с приведением регистра? Окееей, сравнивайте через замер расстояния Левенштейна. Или считайте степень похожести двух строк. Но тоже к регистру одному привести надо. Но...обычного сравнения после приведения регистра должно хватить всем.