За последние 24 часа нас посетили 20380 программистов и 1013 роботов. Сейчас ищут 368 программистов ...

str_replace

Тема в разделе "PHP для новичков", создана пользователем Kvandaik, 18 янв 2019.

  1. Kvandaik

    Kvandaik Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    121
    Симпатии:
    1
    Timeticks: (455215351) 52 days, 16:29:13.51 есть данные получаемые от оборудования, как спарсить чтоб оставалось 52 . при чём значения будут меняться
    (455363270) 53 days, 16:53:52.70
     
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @Kvandaik, то есть, необходимо количество дней?
    Например, при помощи регулярных выражений (preg_match_all()) по шаблону '/(\d+)(?=\sdays)/'
     
  3. Kvandaik

    Kvandaik Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    121
    Симпатии:
    1
    $str="Timeticks: (455215351) 52 days, 16:29:13.51";
    preg_match_all("/(\d+)(?=\sdays)/", $str, $matches);
    print_r($matches);
    Array ( [0] => Array ( [0] => 52 ) [1] => Array ( [0] => 52 ) )

    в массив как то бы не хорошо загонять, т.к у меня ответ от оборудования по разным запросом в цикле выходит и там уже я использую последовательно str_replace("INTEGER:","",$otvet); как выйти из ситуации?
     
  4. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    PHP:
    1. <?php
    2.  
    3. $str = "Timeticks: (455215351) 52 days, 16:29:13.51";
    4.  
    5. $start = strpos($str, ")") + 1;
    6. $end = strpos($str, "days");
    7. $length = $end - $start;
    8.  
    9. $result = trim(substr($str, $start, $length));
    10.  
    11. echo $result;
    12.  
    13. ?>
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    @Kvandaik, ломаем систему Генезиса
    PHP:
    1. <?php
    2.  
    3. echo (int)'52 days, 16:29:13.51';
    --- Добавлено ---
    cyка "Timeticks: (455215351) 52 days, 16:29:13.51";
    --- Добавлено ---
    PHP:
    1. echo explode ( ' ', 'Timeticks: (455215351) 52 days, 16:29:13.51' )[2];
    --- Добавлено ---
    PHP:
    1. echo (int) explode ( ')', 'Timeticks: (455215351) 52 days, 16:29:13.51' )[1];
     
  6. Kvandaik

    Kvandaik Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    121
    Симпатии:
    1
    $tuarray=array('INTEGER: 22','STRING: 10','Timeticks: (455215351) 542 days, 16:29:13.51');
    foreach ($tuarray as $key => $value) {
    $value=str_replace("INTEGER:","", $value);
    $value=str_replace("STRING:","", $value);

    $start = strpos($value, ")") + 1;

    $end = strpos($value, "days");
    //echo $end;
    $length = $end - $start;

    $result = trim(substr($value, $start, $length));
    echo '<pre>'.$key.'-- ';
    echo $result;
    }
    ОТВЕТ
    0-- 2
    1-- 1
    2-- 542 а надо чтоб оставалось 22 10 542
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    зафиг ты трогаешь остальные значения массива, используешь цикл, после тупейшую реализацию с ненужными данными совершаешь ???
    --- Добавлено ---
    Это называется смотрит в книгу - видит фигу.
     
  8. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    ') ' (скобка пробел) тогда уже)
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    нету смысла (int)
     
  10. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    да, норм. проверил только что
    думал 0 выдаст)
     
  11. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Ты определись, что тебе нужно. Ибо в первом посте ты пишешь что нужно спарсить 52 (как я понимаю тебе нужно выдернуть именно то число которое стоит перед словом days)
    А тут у тебя уже не строка, как это было показано изначально, а массив.
    Ты напиши исходные данные и что нужно получить в результате
    --- Добавлено ---
    Он выше что-то про массивы писал в негативном ключе, поэтому explode() я так понял ему не подходит, а так конечно через explode() самая короткая реализация.
     
  12. Kvandaik

    Kvandaik Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    121
    Симпатии:
    1
    из sql $tsql=
    while {
    $urls=$row[ip]
    $oid=array("1.1.1.1","1.2.3.3","1.2.3.4.5");
    foreach($oid=>$oids) {
    будет так $dats=snmp_real_walk($urls,login,pass, $oids)
    foreach($dats=>$prm)
    вот и пошли по порядку значение опроса оборудования. INTEGER: 22
    STRING 10
    Timeticks: (455215351) 542 days, 16:29:13.51

    их и парсить надо потом exec.dbo в базу поедут @args