Autor Zpráva
meca
Profil
Dobrý den,

pokorně se na Vás po letech obracím s prozbou o funkci, kterou jednorázově potřebuji, a ne a ne a ne oprášit staré znalosti, aby to vše fungovalo... Mám jednoduše strukturovanej text, řetězec:

<p> text </p>
<p> text </p>
<p class="cosi"> text </p>
<p> text </p>

A potřebuji za každé <p> dosadit jeho pořadí. A ne a ne, ač tuším, jak banální je to (rozsekat, pak projet polem s preg_replace? něco takového? úú).

Měl-li by někdo vteřinku...

Děkuji, děkuji, děkuji!
tiso
Profil
$text = '<p> text </p>
<p> text </p>
<p class="cosi"> text </p>
<p> text </p>';
$i = 1;
while ($text != $text2 = preg_replace('/(<p[^>]*>)(?!\s\d)/', '\\1 ' . $i, $text, 1)) {
    $text = $text2;
    $i++;
}
echo $text;
Kajman
Profil
Od verze 5.3 by mělo jít něco takového
$i = 1;
echo preg_replace_callback(
    '/(<p(\s[^>]*)?>)/i',
    function($match) use (&$i) { return $match[0] . $i++ . "."; },
    $text
    );
Camo
Profil
Kajman:
Alebo ešte bez tej globálnej premennej $i:
echo preg_replace_callback( '/(<p(\s[^>]*){0,1}>)/i' ,
    function($match) { static $i = 1; return $match[0] . $i++ . "."; },
    $text
    );
    

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0