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]   

> Без описания
eboome
Отправлено: 18 Августа, 2014 - 12:33:39
Post Id


Новичок


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


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




здраствуйте!
есть функция:
PHP:
скопировать код в буфер обмена
  1.  
  2. function drob($num) {
  3. $result=(string)$num;
  4.  
  5. if (preg_match("/./i", $result))
  6.  {
  7.  $out = explode('.', $result);
  8.  return $out[1];
  9.  }
  10.  else
  11.  {
  12.  $out = explode(',', $result);
  13.  return $out[1];
  14.  }
  15.  

Ета функция виводить дробную часть. Если я передаю, например 1.5 возвращает 5, а если я пишу через 1,5, работать не хочет. В чём проблема?
 
 Top
Мелкий Супермодератор
Отправлено: 18 Августа, 2014 - 12:37:02
Post Id



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


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


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




Потому что ваша регулярка ответит 0 только в одном случае - если строка пустая.


-----
PostgreSQL DBA
 
 Top
eboome
Отправлено: 18 Августа, 2014 - 12:39:30
Post Id


Новичок


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


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




Мелкий пишет:
Потому что ваша регулярка ответит 0 только в одном случае - если строка пустая.

тоисть нужно

?
но ситуация та жеНедовольство, огорчение
 
 Top
Мелкий Супермодератор
Отправлено: 18 Августа, 2014 - 12:48:01
Post Id



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


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


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




eboome пишет:
но ситуация та же

Так а почему она должна измениться, если условие на 5 строке всегда будет true, кроме как если строка вообще пустая?


-----
PostgreSQL DBA
 
 Top
eboome
Отправлено: 18 Августа, 2014 - 13:45:02
Post Id


Новичок


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


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




Мелкий пишет:
eboome пишет:
но ситуация та же

Так а почему она должна измениться, если условие на 5 строке всегда будет true, кроме как если строка вообще пустая?

понятно, а как тогда сделать так, если в строке есть "." виполнить блок1, если есть "," виполнить блок2 ?
 
 Top
Мелкий Супермодератор
Отправлено: 18 Августа, 2014 - 14:03:11
Post Id



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


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


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




Почему ваша регулярка совпадёт с любой непустой строкой так и не поняли?

Используйте strpos, зачем регулярку для поиска одного константного символа?
Или preg_split по [,\.] сразу вместо обоих условий.


-----
PostgreSQL DBA
 
 Top
esterio
Отправлено: 18 Августа, 2014 - 14:16:43
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




Точка . в регулярка означает ЛЮБОЙ символ. То что говорил Мелкий
Мелкий пишет:
Потому что ваша регулярка ответит 0 только в одном случае - если строка пустая.
 
 Top
eboome
Отправлено: 18 Августа, 2014 - 14:49:59
Post Id


Новичок


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


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




esterio пишет:
Точка . в регулярка означает ЛЮБОЙ символ. То что говорил Мелкий
Мелкий пишет:
Потому что ваша регулярка ответит 0 только в одном случае - если строка пустая.

кривизна моих мыслей...
в голову приходить только такой вариант:
PHP:
скопировать код в буфер обмена
  1.  
  2. if (preg_match("/,/i", $decimal_fraction))
  3.  {$out = explode(',',$decimal_fraction);}
  4. else
  5.  {$out = explode('.', $result);}
  6.  
 
 Top
Ch_chov
Отправлено: 18 Августа, 2014 - 15:15:16
Post Id



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


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


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





или preg_split
 
 Top
eboome
Отправлено: 18 Августа, 2014 - 15:51:24
Post Id


Новичок


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


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




Ch_chov пишет:
или preg_split

Спасибо за помощь!
вот мое чудо:
PHP:
скопировать код в буфер обмена
  1.  
  2. function decimalFractionToFraction($decimal_fraction){
  3.  
  4.       $out = explode('.', str_replace(',', '.', $decimal_fraction));
  5.      if ((int)$decimal_fraction<1)
  6.       $out[0]='';
  7.      switch($out[1]) {
  8.       case '25':
  9.        $result= $out[0]. ' 1/4';
  10.        break;
  11.       case '33':
  12.        $result= $out[0]. ' 1/3';
  13.        break;
  14.       case '5':
  15.        $result= $out[0]. ' 1/2';
  16.        break;
  17.       case '75':
  18.        $result= $out[0]. ' 3/4';
  19.        break;
  20.       default:
  21.        $result= $decimal_fraction;
  22.       }
  23.     return $result;
  24.      }
  25.  


Функция для работи с количеством ингредиентов. Если в БД есть 1.5 то мне нужно чтоб отображалось 1 1/2. Суть в том что БД уже была заполнена до меня, и там есть значения как и с "." так и с ",". Еще раз спасибоУлыбка

(Отредактировано автором: 18 Августа, 2014 - 15:52:08)

 
 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