Приведение типа

Discussion in 'PHP' started by AlexG, 24 Dec 2015.

  1. AlexG

    AlexG Member

    Joined:
    26 Sep 2015
    Messages:
    57
    Likes Received:
    12
    Reputations:
    5
    Регулярками выдергиваю некотрое число. Вар-дамп показывает что это строка. Мне надо привести его к integer. Пробовал (int), intval, settype - либо ошибка, либо 0 на выходе.
     
  2. AlexG

    AlexG Member

    Joined:
    26 Sep 2015
    Messages:
    57
    Likes Received:
    12
    Reputations:
    5
    UPD
    Разобрался с этим чудом. Распишу здесь - вдруг нубам типа меня пригодится.
    Итак, имеем некоторую структуру:
    Code:
    <teg1>
      <teg11>123</teg11>
         ..............
      <teg1+N>asd123</teg1+N>
    </teg1>
    <teg2>
      <teg11>123</teg11>
         ..............
      <teg1+N>asd123</teg1+N>
    </teg2>
    ..............................
    
    По какой-то причине, известной одному горе-кодеру регуляркой дергаем один из кусков:
    Code:
    <teg2>
      <teg11>123</teg11>
         ..............
      <teg1+N>asd123</teg1+N>
    </teg2>
    ..............................
    
    Далее регуляркой (возможно тут и кроется моя ошибка) тянем вложенный тег:
    preg_match ("/<teg11>(.*)<\/teg11>/",$source,$result); $result = $result[0];//
    Смотрим через echo - все отлично, вытянули "123".
    И тут началось... Потребовалось применить это значение именно как integer. Все варианты привидения типов дают либо "0", либо ошибку.
    Пробуем var_dump - string(18) "123", опять пробуем привести - int(0).
    И только путем "много читать" дошло - в $result[0] складывается 18 символов(<teg11>123</teg11>), вместе с "123"
    а вот в $result[1] - складывается содержимое кармана ("123"), которое замечательно обрабатывается.

    П.С. Тапками не бросаться - не исключаю что у меня косяк в самом подходе и построении регулярки и решение является костылем.
    Но что есть, то есть - так или иначе задачка на данный момент решена.
    Если кто-то по путевому объяснит почему в данном примере так вышло и как этого избегать - буду благодарен.
     
  3. Fepsis

    Fepsis Elder - Старейшина

    Joined:
    17 Sep 2008
    Messages:
    791
    Likes Received:
    391
    Reputations:
    72
    Открыл бы исходный код страницы в браузере - сразу бы все увидел.

    Про $result[0], $result[1] в доках все описано: http://php.net/manual/ru/function.preg-match.php

    Да и вообще, структура исходного текста на xml похожа, возможно проще заюзать simplexml_load_string
     
    grimnir and AlexG like this.
  4. AlexG

    AlexG Member

    Joined:
    26 Sep 2015
    Messages:
    57
    Likes Received:
    12
    Reputations:
    5
    Согласен. Но как и у многих новичков - одна и та же ошибка - сначала изучим всякие копи-паст уроки из интернета, потом будем долго мучаться, и только потом, решим обратиться к документации.
    А за simplexml_load_string спасибо - не знал о такой.
     
  5. M@rkus

    M@rkus Banned

    Joined:
    25 Jul 2010
    Messages:
    43
    Likes Received:
    5
    Reputations:
    0
    юзай (\d+) 100% число