Преобразование строки в число (стандартные способы типа settype не катят)

Тема в разделе "PHP", создана пользователем notzevs, 20 апр 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. notzevs

    notzevs Создатель

    Регистр.:
    27 сен 2009
    Сообщения:
    30
    Симпатии:
    5
    Народ, подскажите как преобразовать строку в число. стандартные методы типа указания в скобках не помогают. settype тоже.
    Строка превращается в 0, если поменять со sting в числовой формат.
    до преобразования "1.234" после "0"
    вот код, (простой грабера)
    PHP:
    <?php
    $page 
    file_get_contents("http://www.rbc.ua/rus/nbu");
    preg_match('/долари США<\/td>(.+)<\/td>/isU'$page$temp);
    $res preg_replace('/<center>/isU'''$temp[1]);
    $res preg_replace('/<\/center>/isU'''$res);
    echo 
    $res;
    ?>
     
  2. bondaf

    bondaf Постоялец

    Регистр.:
    16 мар 2010
    Сообщения:
    85
    Симпатии:
    20
    А ты уверен, что первый preg_match правильно работает? Попробуй вывести его результат ($temp)
     
  3. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    PHP:
    $page file_get_contents("http://www.rbc.ua/rus/nbu");
    preg_match('/долари США<\/td>(.+)<\/td>/isU'$page$temp);
    $res strip_tags($temp[1]);
    //тест
    echo floatval($res)*3;
     
    notzevs нравится это.
  4. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Может не совсем правильно понял ТС, но может это решение подойдет?
    PHP:
        function to_num($str)
        {
            
    preg_match_all("(\d+)"$str$m);
            
    $n '';
            foreach (
    $m[0] as $v) {
                
    $n .= (string )$v;
            }
            return (int)
    $n;
        }
     
    notzevs нравится это.
  5. Abliganto

    Abliganto Постоялец

    Регистр.:
    30 ноя 2009
    Сообщения:
    111
    Симпатии:
    46
    \d - это десятичное число, а у ТС дробное, т.е. там есть ещё и точка

    PHP:
    $page file_get_contents("http://www.rbc.ua/rus/nbu");

    if ( 
    preg_match'#<td[^>]*>долари США</td>\s*<td[^>]*><center>([\d\.]+)</center></td>#is'$page$matches ) )
    {
       echo 
    $matches[1]; // resultat
    }
    Не проверял, но должно работать
     
    notzevs нравится это.
  6. notzevs

    notzevs Создатель

    Регистр.:
    27 сен 2009
    Сообщения:
    30
    Симпатии:
    5
    Видимо preg_replace делает всю заморочку.
    Спасибо, всем великим и всемогущим)))
    Скрипты Abliganto и polyetilen отлично работают и идеально подходят в данной ситуации.
     
Статус темы:
Закрыта.