Замена определенного элемента по порядковому номеру

Тема в разделе "PHP", создана пользователем GROB, 30 окт 2008.

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

    GROB

    Регистр.:
    28 мар 2006
    Сообщения:
    177
    Симпатии:
    63
    Есть например следующий код:
    PHP:
    $text 'строка 1<br />cтрока 2<br />строка 3<br />строка 4';
    Нужно заменить только, например, третий <br /> на <p> как реализовать?

    Кроме как перебора по символам, определение позииции и т.д. ничего не приходит в голову.
     
  2. Hemi-Sync

    Hemi-Sync Постоялец

    Регистр.:
    17 дек 2006
    Сообщения:
    88
    Симпатии:
    38
    Ну почему же. Можно пойти с другой стороны.
    PHP:
    $text 'строка 1<br />cтрока 2<br />строка 3<br />строка 4'
    $parts=explode('<'$text);
    $parts[3]=str_replace("br />""p />"$parts[3]);
    $newText=join('<'$parts);
    echo 
    $newText;
    Можно простой заменой менять, ведь по правилам не дожно в тексте быть знаков > кроме тэгов. Можно использовать substr, тут уже зависит от вариаций текста. Также можно проверять, а имеет ли 1й элемент массива после explode таг.
    Например так
    PHP:
    if($text[0]=='<'){
    значит считаем как естьто есть 3й элемент это $parts[3]
    }else{
    значит считаем с -1. то есть 3й элемент это $parts[2]
    }
     
    GROB нравится это.
  3. Avtandil

    Avtandil Создатель

    Регистр.:
    30 сен 2006
    Сообщения:
    30
    Симпатии:
    24
    Первое, что пришло в голову:
    PHP:
    $text 'строка 1<br />cтрока 2<br />строка 3<br />строка 4';
    $cnt count($line=explode('<br />',$text));
    $str ''$n 0;
    while (
    $n<$cnt$str .= $line[$n++].($n=='<p>' '<br />');
    echo 
    "<xmp>$str</xmp>";
     
    GROB нравится это.
  4. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    Ну и регэкспами можно.
    PHP:
    <?php 
    $text
    ='строка 1<br />cтрока 2<br />строка 3<br />строка 4';
    $text=preg_replace('#(?:.*?\K<br />){3}#s''<p>'$text1);
    echo 
    $text;
    ?>
    З.Ы. только не валидно заменять <br /> на <p>. <br /> подразумевает XML синтаксис, а в XML незакрытые теги запрещенны.
     
    GROB нравится это.
  5. GROB

    GROB

    Регистр.:
    28 мар 2006
    Сообщения:
    177
    Симпатии:
    63
    <p> просто в качестве примера :)

    На самом деле просто парсер, и надо отделить краткую новость от полной.
     
Статус темы:
Закрыта.