За последние 24 часа нас посетили 18783 программиста и 1626 роботов. Сейчас ищут 888 программистов ...

Поиск последнего вхождения подстроки в строку php4

Тема в разделе "PHP для новичков", создана пользователем inline, 25 июн 2010.

  1. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    Нужно средствами php4 найти позицию последнего вхождения подстроки в строку
    На php5 есть strripos, что есть на php4?
     
  2. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    А в конечном итоге нужно из
    получить все после последнего </item>
     
  3. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Код (Text):
    1.  
    2. preg_match("#(?:<\/item>)([\w,. ]*)$#i", "<item>shdjghhkkkgjkf</item><item>jdfgjkgjk</item>kkk end string ", $matches);
    3. var_dump($matches);
     
  4. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    Решил проблему так
    PHP:
    1. preg_match("/<\/item>(.*)$/isU",$stek,$res)
    но с регуляркой затратно по времени - скорость скрипта ощутимо падает
     
  5. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    нужно строковыми функциями
     
  6. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    строковыми дольше будет.
     
  7. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Можно такую х-ню замутить:
    PHP:
    1. <?php
    2.  
    3. $haystack = "<item>shdjghhgjkf</item><item>jdfgjkgjk</item>end string";
    4. $haystack = strrev($haystack);
    5.  
    6. echo strrev(substr($haystack, 0, strpos($haystack, ">meti/<")));
    7.  
    8. ?>
    Но реглярки - разумнее, быстрее и профессиональнее.
     
  8. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    а есть в пхп 4 такая функция? или свою делать нужно? если свою (накручивать всякое), то возможно и дольше
     
  9. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    $stack = explode("</item>", $haystack);
    $needl = $stack[count($stack)-1];
     
  10. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    ShamahN
    Этот вариант я опустил, кстати, из-за возможно огромного массива =)
     
  11. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    то что нужно! спасибо!
    п/с как я сам не вспомнил про explode() - всегда думал, что там разделителем только символ

    читаю файл по кусочках - больших масивов быть не должно
     
  12. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    счас протестил с explode() - xml в 60МБ за несколько мин.
     
  13. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    inline
    регулярками медленнее?
     
  14. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    намного.. в разы
    регуляркой 6к записей обработал за 7 мин. и остановил скрипт
    через explode() 120к за 7 мин.