8800 sujets

Développement web côté serveur, CMS

Bonjour,

J'essaie désespérément de passer une incrémentation dans un preg_replace, mais j'ai deux problèmes :

preg_match_all('#class="gotonote" name="gotonote">#',$corpsArticle,$tableau);
$cle = 1;
foreach($tableau[0] as $cle => $valeur)
{
$remplacant = 'class="gotonote'.$cle.'" name="gotonote'.$cle.'">'.$cle;
$corpsArticle = preg_replace('#class="gotonote" name="gotonote">#',$remplacant,$corpsArticle);
}


Mes deux problèmes :
1. impossible de passer la valeur de "$cle" dans le preg_replace (je veux obtenir "gotonote1", etc.), pourtant "echo $cle;" donne bien le compte "0,1,2,3 etc."
2. impossible de trouver comment passer mon compteur à partir de 1, et non pas de 0;

J'ai voulu utiliser un preg_replace_callback($regex,"incrementation",$corpsArticle);, mais le problème est le même, et j'en utilise déjà un autre qui semble "incompatible".

Merci d'avance.
Modifié par montoumes (20 Jul 2009 - 17:17)
connecté
Modérateur
Hello,

J'ai l'impression que tu fais compliquer alors que c'est apparemment simple :


$str = 'class="gotonote" name="gotonote">';
for ($i = 1; $i<=count($tableau[0]); $i++){
	$str .= str_replace('class="gotonote" name="gotonote">','class="gotonote"'.$i.' name="gotonote"'.$i.'>'.$i,$str);
	
}

Modifié par Nolem (20 Jul 2009 - 16:38)
Bonjour,

En fait c'est un peu plus compliqué que ça n'y parait Smiley smile
Je récupère $corpsArticle qui contient tout le contenu de mon article, dans lequel je veux remplacer tous les "class="gotonote" name="gotonote">" en y ajoutant des numéros, pour créer des renvois aux notes de bas de page.

Donc dans ta méthode, je ne comprends pas comment je renvoie les résultats dans $corpsArticle pour l'affichage ?

Si j'adapte le code comme ceci, toutes les notes sont marquées "1" :
preg_match_all('#class="gotonote" name="gotonote">#',$corpsArticle,$tableau);
$str = 'class="gotonote" name="gotonote">'; 
for ($i = 1; $i<=count($tableau[0]); $i++){ 
  $corpsArticle = str_replace($str,'class="gotonote'.$i.'" name="gotonote'.$i.'">'.$i,$corpsArticle);  
} 

Modifié par montoumes (20 Jul 2009 - 14:36)
Salut,
a écrit :
J'ai voulu utiliser un preg_replace_callback($regex,"incrementation",$corpsArticle);, mais le problème est le même, et j'en utilise déjà un autre qui semble "incompatible".
Perso, j'irais également sur preg_replace_callback. Par contre, pour l'"autre qui semble incompatible", (1) ça me paraît space, et (2) sans le voir on peut pas t'aider Smiley smile . Ma soluce :
$cle = 0;

function ajouteCle($matches) {
    global $cle;
    $cle++;
    return 'class="gotonote'.$cle.'" name="gotonote'.$cle.'">'.$cle;
}
echo preg_replace_callback('#class="gotonote" name="gotonote">#', "ajouteCle", $corpsArticle);
connecté
Modérateur
marcv => Je n'avais pas bien compris comment fonctionne preg_replace_callback(). Merci Smiley smile

montoumes =>Il y a des petites choses que je ne comprends pas bien :

Plusieurs classes différentes pour plusieurs affichage différents ?
Est ce la partie d'un élément de formulaire (class="gotonote" name="gotonote">) ?
Modifié par Nolem (20 Jul 2009 - 17:16)
Ah oui bien vu marcv,

En fait c'est parce que je suis un gros relou, et que j'ai pas pensé à faire :
$corpsArticle = preg_replace_callback('#name="gotonote">#', "ajouteCle", $corpsArticle);

au lieu d'un simple
preg_replace_callback('#name="gotonote">#', "ajouteCle", $corpsArticle);


Et c'est donc le deuxième callback qui fera
echo preg_replace_callback('#name="gotonote">#', "ajouteCle", $corpsArticle);


Merci à tous les deux !