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

Статус
В этой теме нельзя размещать новые ответы.

GROB

Гуру форума
Регистрация
28 Мар 2006
Сообщения
177
Реакции
76
Есть например следующий код:
PHP:
$text = 'строка 1<br />cтрока 2<br />строка 3<br />строка 4';

Нужно заменить только, например, третий <br /> на <p> как реализовать?

Кроме как перебора по символам, определение позииции и т.д. ничего не приходит в голову.
 
Ну почему же. Можно пойти с другой стороны.
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
Первое, что пришло в голову:
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==3 ? '<p>' : '<br />');
echo "<xmp>$str</xmp>";
 
  • Нравится
Реакции: GROB
Ну и регэкспами можно.
PHP:
<?php 
$text='строка 1<br />cтрока 2<br />строка 3<br />строка 4';
$text=preg_replace('#(?:.*?\K<br />){3}#s', '<p>', $text, 1);
echo $text;
?>

З.Ы. только не валидно заменять <br /> на <p>. <br /> подразумевает XML синтаксис, а в XML незакрытые теги запрещенны.
 
  • Нравится
Реакции: GROB
<p> просто в качестве примера :)

На самом деле просто парсер, и надо отделить краткую новость от полной.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху