Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: strcmp возвращает число 2

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
grizzlynet
Отправлено: 20 Января, 2012 - 12:29:50
Post Id



Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




Привет!
Столкнулся с непоняткой! Когда $a целое число, врзвращяется число 0. По документации http://php.su/functions/?f=strcm...&choice=info , нет такого что бы функция возвращала число 2.

 
 Top
Zuldek
Отправлено: 20 Января, 2012 - 12:34:38
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




strcmp($a,strval(intval($a)))
Если непонятка, то разбиратсья с такими непонятками надо так:


CODE (htmlphp):
скопировать код в буфер обмена
  1. $a =60.8;
  2. echo intval($a)."<br/>";
  3. echo strval($a)."<br/>";
  4. echo strcmp($a,strval(intval($a)));
 
 Top
grizzlynet
Отправлено: 20 Января, 2012 - 12:39:58
Post Id



Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




Zuldek пишет:
strcmp($a,strval(intval($a)))
Если непонятка, то разбиратсья с такими непонятками надо так:


CODE (htmlphp):
скопировать код в буфер обмена
  1. $a =60.8;
  2. echo intval($a)."<br/>";
  3. echo strval($a)."<br/>";
  4. echo strcmp($a,strval(intval($a)));


Понятно что каждая функция делает. Вопрос в том, почему число 2 возвращается?
 
 Top
Zuldek
Отправлено: 20 Января, 2012 - 12:44:14
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




grizzlynet пишет:
Понятно что каждая функция делает. Вопрос в том, почему число 2 возвращается?

Если задали этот вопрос то вам не понятно что и главное как делает каждая функция. Выведите результаты как показал и поймете. Результирующая третья функция может вам вывести любое положительное число в зависимости от параметров.
 
 Top
Мелкий Супермодератор
Отправлено: 20 Января, 2012 - 12:51:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Потому что 2>0.
Почему именно 2, а не 5 - можете покопать Zend/zend_builtin_functions.c из сырцов PHP. Впрочем, оттуда вы попадёте в сишную функцию strcmp с аналогичным поведением.


-----
PostgreSQL DBA
 
 Top
grizzlynet
Отправлено: 20 Января, 2012 - 12:55:02
Post Id



Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. echo strcmp(2,3)."<br />"; //выводит -1
  2. echo strcmp(2,313545343)."<br />";  //выводит -1
  3. echo strcmp(313545343,2)."<br />";  //выводит 1
  4. echo strcmp(2,2)."<br />";  //выводит 0


тут понятно
(Добавление)
При типе float возвращается разница символов >

PHP:
скопировать код в буфер обмена
  1. $a = 60.856363;
  2. echo strcmp("60.856363","60"); //выводит 7


При integer выводит насколько >,<,==


если так echo strcmp("21689","2"); //выводит 4

Улыбка

(Отредактировано автором: 20 Января, 2012 - 14:56:40)

 
 Top
OrmaJever Модератор
Отправлено: 20 Января, 2012 - 16:10:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




grizzlynet пишет:
По документации http://php.su/functions/?f=strcm...&choice=info , нет такого что бы функция возвращала число 2.

В документации написано
Цитата:
Возвращает отрицательное число, если str1 меньше, чем str2; положительное число, если str1 больше, чем str2, и 0 если строки равны.

А разве 2 это не положительное число? Эта функция должна возвращать разницу в длине строки.
(Добавление)
grizzlynet пишет:
При типе float возвращается разница символов >
PHP:
скопировать код в буфер обмена
  1. $a = 60.856363;
  2. echo strcmp("60.856363","60"); //выводит 7

это не float, это строка.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
grizzlynet
Отправлено: 21 Января, 2012 - 09:02:32
Post Id



Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




Вообще ,да, это ф-ий для работы со строками, я применил её для проверки- целое или вещественное число.
даже так echo strcmp("21689","2"); //выводит 4
 
 Top
OrmaJever Модератор
Отправлено: 21 Января, 2012 - 13:05:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




grizzlynet пишет:
даже так echo strcmp("21689","2"); //выводит 4

Даже как? любой символ взятый в кавычки это строка, а эта функции возвращает разницу в длине строк, поэтому здесь всё верно.
Второй момент, число не бывает длинее или короче, оно бывает больше или меньше, поэтому с числовыми типами будет -1, 0 или 1.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB