[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: сравнение строк
zvezda_t
Здравствуйте!
Есть у меня два длинных кода, их сравнение не проходит... в чем причина понять не могу...
Когда сравниваю код из 15 символов - работает, когда 19 - не работает.

Думаю, может в типах данных, у меня кажется обе переменные текстовые...
Ниже приведённый код работает, а мой нет( у меня выходит не правельное сравнение...

 $str1="1122233344455556666";
$str2=1122233344455556666;// даже так задаю, сравнение работает,
//а у меня не работает


$cod_r=substr($str1,0,2);
$cod_d=substr($str1,2,3);
$cod_c=substr($str1,5,3);
$cod_p=substr($str1,8,3);
$cod_s=substr($str1,11,4);

$sel=$cod_r.$cod_d.$cod_c.$cod_p.$cod_s.substr($str1,15,4);

if($str2==$sel)
print "yes".$sel;
else
print "no".$sel."/".$str2;

если кто-нибудь что - нибудь понял... научите сравнивать длинные строки с числовыми символами



Спустя 6 минут, 19 секунд (6.07.2010 - 20:11) Slays написал(а):
свой не рабочий пример покажи

Спустя 2 минуты, 13 секунд (6.07.2010 - 20:13) zvezda_t написал(а):
мой скрипт рабочий отличается только тем что значения берутся из БД

Спустя 22 минуты, 31 секунда (6.07.2010 - 20:36) linker написал(а):
А не пробовали просто if ($str1 == $str2) {}, без извращений с substr(); ?

Спустя 31 минута, 56 секунд (6.07.2010 - 21:08) Slays написал(а):
php забивает на типы данных и при сравнении строки и числа сделает число строкой, как и при сложении, я тоже не понял чо за извращения

Спустя 9 часов, 34 минуты, 39 секунд (7.07.2010 - 06:42) zvezda_t написал(а):
Убрала я эти substr()...

просто сравниваю строки...
провела ряд экспериментов, и вот что получила:

Если $str2=7700000000031600008,
то условие if ($str2==$str1) выполняется при значениях
$str1= :
7700000000031600001
7700000000031600002
7700000000031600003
7700000000031600004
7700000000031600005
7700000000031600006
7700000000031600007
7700000000031600008
7700000000031600009
....
7700000000031600016

но не выполняется, если
$str1= :
7700000000031600018
7700000000031600021
7700000000031600022

Второй случай: $str2=7700000000031600022
то условие if ($str2==$str1) выполняется при значениях
$str1= :
7700000000031600018
7700000000031600021
7700000000031600022

и не выполняется
когда на конце кода числа от 1 до 16.

что это может быть такое?

Спустя 10 минут, 17 секунд (7.07.2010 - 06:53) Basili4 написал(а):
пробуй заменить == на strcmp()

Спустя 3 минуты, 49 секунд (7.07.2010 - 06:56) zvezda_t написал(а):
ДА!!!!! Ура!!!!!!
Вася! Получилось)))))))

Спустя 1 час, 12 минут, 43 секунды (7.07.2010 - 08:09) linker написал(а):
НУ если это числа, то нафига сравнивать их как строки? Это же жутко долго выполняется. В данном случае, я конечно недоумеваю, но при сокращении значений на 3 знака (видимо слишком большое число для целочисленного типа), if начинает работать как нужно. Вам действительно нужны такие длинные числа?

Спустя 3 минуты, 4 секунды (7.07.2010 - 08:12) Basili4 написал(а):
linker
там код используется для однозначной идентификации дома в стране. первые там сколькото регион потом район итд последнии дом

Спустя 9 месяцев, 16 дней, 4 часа, 40 минут, 22 секунды (23.04.2011 - 12:52) Arbat1 написал(а):
Цитата
php забивает на типы данных и при сравнении строки и числа сделает число строкой, как и при сложении, я тоже не понял чо за извращения

Это неверно. Наоборот, при сравнении строки и числа (или чисел, отформатированных как строка) оба значения преобразуется к числовому типу и сравниваются как числа.
Подробнее здесь:
http://de2.php.net/manual/en/language.oper....comparison.php

Поскольку числа получаются большие, то тип Integer использоваться не может. Используется тип Float. А сравнивать числа этого типа в PHP с помощью оператора "==" категорически не рекомендуется, результат будет непредсказуемый. Это связано с тем, что внутреннее представление таких чисел в системе возможно лишь с ограниченной точностью, которая во многом зависит от конфигурации системы.
Подробнее здесь:
http://de2.php.net/manual/en/language.types.float.php

Таким образом, если необходимо сравнивать подобные значения как числа, следуется использовать специальные математические функции PHP, а чтобы сравнивать их как строки - специальные строковые функции. Это и предложил Basili4


_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.