Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Извлечение из строки цены в долларах
 
 автор: rafonets   (16.07.2011 в 18:54)   письмо автору
 
 

еще один вопрос в переменой есть записи такого вида: $586 | 4688 грн
$1104 | 8832 грн
$1104 | 8832 грн
$1104 | 8832 грн

т.е. виде $*** | *** грн
цены самые разные от 15 usd до 2-3 тысяч
нужно значение только в usd т.е. из этого "$586 | 4688 грн" получить это 586.0000

  Ответить  
 
 автор: cheops   (16.07.2011 в 19:07)   письмо автору
 
   для: rafonets   (16.07.2011 в 18:54)
 

Если ничего против регулярных выражений не имеете, то можно начать отталкиваться от следующего скрипта
<?php
  $str 
'$586 | 4688 грн';
  
$pattern "#^\\$(\d+)\s*\|\s*(\d+)\s*грн$#";
  
preg_match ($pattern$str$out);
  echo 
"<pre>";
  
print_r($out);
  echo 
"</pre>";
?>

  Ответить  
 
 автор: rafonets   (16.07.2011 в 19:12)   письмо автору
 
   для: cheops   (16.07.2011 в 19:07)
 

Вернуло пустое значение

  Ответить  
 
 автор: cheops   (16.07.2011 в 19:15)   письмо автору
 
   для: rafonets   (16.07.2011 в 19:12)
 

Хм... а если перейти на одиночные кавычки и убрать один экранирующий символ у $, работает или опять пустое значение (тестируете под windows или под unix)?
<?php 
  $str 
'$586 | 4688 грн'
  
$pattern '#^\$(\d+)\s*\|\s*(\d+)\s*грн$#'
  
preg_match ($pattern$str$out); 
  echo 
"<pre>"
  
print_r($out); 
  echo 
"</pre>"
?>

  Ответить  
 
 автор: rafonets   (16.07.2011 в 19:18)   письмо автору
 
   для: cheops   (16.07.2011 в 19:15)
 

Windows Denwer (php) 5.3
значит так работает:
$str = '$586 | 4688 грн';
$pattern = '#^\$(\d+)\s*\|\s*(\d+)\s*грн$#';
preg_match ($pattern, $str, $out);
echo "<pre>";
print_r($out);
echo "</pre>";

а если вместо str поставить мою переименую price уже не работает

  Ответить  
 
 автор: rafonets   (16.07.2011 в 19:19)   письмо автору
 
   для: rafonets   (16.07.2011 в 19:18)
 

Второй вариант работает так же

  Ответить  
 
 автор: cheops   (16.07.2011 в 19:19)   письмо автору
 
   для: rafonets   (16.07.2011 в 19:18)
 

Правильно ли я понимаю, что в переменной $str у вас много таких строк и вам нужно получить массив всех долларовых цен?

  Ответить  
 
 автор: rafonets   (16.07.2011 в 19:21)   письмо автору
 
   для: cheops   (16.07.2011 в 19:19)
 

trim();
Все заработало) спасибо

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования