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 :: Правильное преобразование типов

 PHP.SU

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


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

> Без описания
will123
Отправлено: 12 Декабря, 2009 - 09:58:40
Post Id



Новичок


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


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




возник вопрос, как правильно преобразовать строку в целое

пример
CODE (text):
скопировать код в буфер обмена
  1.  
  2. //на входе подаю $id = 7opoppoo
  3. $id = (int) $id;   //$id станет 7. т.е. отрежется opoppoo, а мне надо если присутствуют символы в числе, то возвращало false
  4.  
  5. //а если так
  6. is_int ($id); //всегда вернет false, т.к я извлекаю id из URI,  
  7.  
;

(Отредактировано автором: 12 Декабря, 2009 - 10:00:45)

 
 Top
Мелкий Супермодератор
Отправлено: 12 Декабря, 2009 - 12:41:49
Post Id



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


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


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




Например:
PHP:
скопировать код в буфер обмена
  1. if ((int) $id == $id) {
  2. //у нас только число
  3. } else {
  4. //нам передали строку
  5. }


-----
PostgreSQL DBA
 
 Top
will123
Отправлено: 12 Декабря, 2009 - 13:15:05
Post Id



Новичок


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


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




Мелкий пишет:
Например:
PHP:
скопировать код в буфер обмена
  1. if ((int) $id == $id) {
  2. //у нас только число
  3. } else {
  4. //нам передали строку
  5. }


не работает как надо, если $id допусти = 2sdlf. Условие выполняется как true
 
 Top
Мелкий Супермодератор
Отправлено: 12 Декабря, 2009 - 13:25:07
Post Id



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


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


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




Да, действительно. Работает с таким условием:
if ($id == (string) intval($id))
Только это уже, кажется, костыль Улыбка


-----
PostgreSQL DBA
 
 Top
SAD
Отправлено: 12 Декабря, 2009 - 13:28:51
Post Id



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


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


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




используй регулярку, чтобы проверять id
CODE (text):
скопировать код в буфер обмена
  1. function checkid($id)
  2.         {
  3.             if(!preg_match("/^[\d]+$/",$id)
  4.               return false;
  5.  
  6.             else return true;
  7.         }
 
 Top
Ch_chov
Отправлено: 12 Декабря, 2009 - 13:30:52
Post Id



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


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


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




PHP:
скопировать код в буфер обмена
  1. if (preg_match('#^\d+$#', $id))
  2.   $id = (int)$id;
  3. else
  4.   echo 'Не число';
 
 Top
Champion Супермодератор
Отправлено: 12 Декабря, 2009 - 13:35:22
Post Id



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


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




intval, (int), settype ...
 
 Top
will123
Отправлено: 12 Декабря, 2009 - 13:44:21
Post Id



Новичок


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


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




Мелкий пишет:
Да, действительно. Работает с таким условием:
if ($id == (string) intval($id))
Только это уже, кажется, костыль Улыбка

ок, работает

(Отредактировано автором: 12 Декабря, 2009 - 13:50:36)

 
 Top
JustUserR
Отправлено: 12 Декабря, 2009 - 14:14:34
Post Id



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


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


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




will123 А нельзя просто проверить с помощью gettype тип данных без всяких преобразований - при этом все получаемые от пользователя данные по умолчанию имебт тип string


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
will123
Отправлено: 12 Декабря, 2009 - 14:21:35
Post Id



Новичок


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


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




JustUserR пишет:
will123 А нельзя просто проверить с помощью gettype тип данных без всяких преобразований - при этом все получаемые от пользователя данные по умолчанию имебт тип string

так если мы извлекаем из URI например $id (mysite/some/id), то всяко разно оно будет иметь тип string. А мне надо проверить является ли айди числом, вот поэтому я преобразую его сначала в целое
 
 Top
Ch_chov
Отправлено: 12 Декабря, 2009 - 14:23:10
Post Id



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


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


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




Тогда is_numeric подойдёт.
Добавление
А если нужно принимать только целые числа то ctype_digit.

(Отредактировано автором: 12 Декабря, 2009 - 14:28:02)

 
 Top
JustUserR
Отправлено: 12 Декабря, 2009 - 18:57:57
Post Id



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


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


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




will123 пишет:
Так если мы извлекаем из URI например $id (mysite/some/id), то всяко разно оно будет иметь тип string. А мне надо проверить является ли айди числом, вот поэтому я преобразую его сначала в целое

Ch_chov пишет:
Тогда is_numeric подойдёт
Про это собственно я и говорил - заниматься явными/неявными преобразованиями для таких целей не есть хорошо - учитывая что PHP язык со свободным типом данных и строки и числа мало чем отличаются то любую проверку всегда можно сделать с помощью регулярного выражения


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Hunter
Отправлено: 14 Декабря, 2009 - 17:24:45
Post Id



Частый гость


Покинул форум
Сообщений всего: 214
Дата рег-ции: Дек. 2009  
Откуда: Блага


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




will123 пишет:
//на входе подаю $id = 7opoppoo$id = (int) $id; //$id станет 7. т.е. отрежется opoppoo, а мне надо если присутствуют символы в числе, то возвращало false //а если такis_int ($id); //всегда вернет false, т.к я извлекаю id из URI,

CODE (text):
скопировать код в буфер обмена
  1.  
  2. <?php
  3.     // .. тут что нибудь Ваше для получения значения $id
  4.     if (gettype($id) == 'integer') {
  5.         settype($id, 'integer');
  6.     }
  7.     else {
  8.         echo 'это не является целым числом'
  9.     }
  10.     // .. тут далее то что вам надо делать далее
  11.  

а вообще необходимость преобразования типов "вручную" редко возникает в рнр..
(Добавление)
исходя из задачи (не обратил внимания сразу)) строку №8 надо заменить на
$id = "false";
settype($id, "boolean");
 
 Top
JustUserR
Отправлено: 14 Декабря, 2009 - 17:45:58
Post Id



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


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


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




Цитата:
if (gettype($id) == "integer") {5. settype($id, "integer");
Что это за бред? Если значение равно integer то установить его в integer ? Может имелось в виду какое преобразование
Да и в конце концов что мешает использовать is_numeric ?


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Hunter
Отправлено: 15 Декабря, 2009 - 10:18:56
Post Id



Частый гость


Покинул форум
Сообщений всего: 214
Дата рег-ции: Дек. 2009  
Откуда: Блага


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




точно, глупось сморозил....
наверное так:

PHP:
скопировать код в буфер обмена
  1.  
  2. if (is_numeric($id)) {
  3.     settype($id, 'integer');
  4. }
  5. else {
  6.     // ..действия скрипта при наличии в строке буквенных символов
  7. }
  8.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB