8792 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai une chaîne de caractère $contenuArticle qui contient quelque chose comme ceci:
<h3>Titre</h3>
<p>Mon texte</p>

<h3>Titre</h3>
<p>Mon texte</p>
<p>Mon texte</p>
<p>Mon texte</p>

<h3>Titre</h3>
<p>Mon texte</p>
<p>Mon texte</p>


Je souhaiterais ajouter des identifiants aux titres h3 de manière incrémentale pour obtenir au final un code tel que le suivant:
<h3 id="titre1">Titre</h3>
<p>Mon texte</p>

<h3 id="titre2">Titre</h3>
<p>Mon texte</p>
<p>Mon texte</p>
<p>Mon texte</p>

<h3 id="titre3">Titre</h3>
<p>Mon texte</p>
<p>Mon texte</p>


Je suppose que ça doit être assez évident, pourtant je bloque depuis deux bonnes heures... Smiley confused

Si l'un d'entre vous à une idée, elle est franchement la bienvenue! Smiley ravi

Cordialement,
Benjamin
Modifié par Benjamin D.C. (30 Apr 2007 - 01:43)
Salut
Un remplacement par expression régulière et un callback avec index static incrémenté :

<?php
$contenuArticle = '<h3>Titre</h3>
<p>Mon texte</p>

<h3>Titre</h3>
<p>Mon texte</p>
<p>Mon texte</p>
<p>Mon texte</p>

<h3>Titre</h3>
<p>Mon texte</p>
<p>Mon texte</p>';

$pattern = "`(<h3>(.*?)</h3>)+`i";
$args = '$match';
$corps = '
    static $i = 0;
    $s = $match[0];
    $s = preg_replace("`(<h3>)`", "<h3 id=\"titre".(++$i)."\">", $s);
    return "$s";
';
$callback = create_function($args,$corps);

$contenuArticleIndexe = preg_replace_callback($pattern, $callback, $contenuArticle); 

echo $contenuArticleIndexe;
?>

Si tu appelles 2 fois de suite, l'incrémentation continue (normal, la donnée est static).
Ca marcherait également avec un indice global mais je trouve ça moins propre.
A+