Remplacer un caractère dans une chaine par une variable

Hélène
Invité n'ayant pas de compte PHPfrance

01 nov. 2010, 23:21

Bonjour,
Je cherche à faire la manipulation suivante: j'interroge une BDD pour ressortir le contenu d'un enregistrement.
Il s'agit d'une texte, composé d'en ensemble de titre et de textes sous la forme
<h2> (...) </h2>
<p> (...) </p>
J'aimerai maintenant pouvoir remplacer ces <h2> par quelque chose du genre
<h2 class='[b]element1[/b]'> (...) </h2>
<p> (...) </p>
<h2 class='[b]element2[/b]'> (...) </h2>
<p> (...) </p>
Je devine qu'il faut faire une boucle pour parcourir chaque h2 et le remplacer par un <h2 class='element$i'> et on incrémente $i=$i+1

Mais je n'y arrive pas. Si j'utilise ereg_replace ou plus exactement str_replace, la fonction me remplace tout avec la même valeur, sans faire de distinction entre les élements.

Merci pour votre aide

ViPHP
ViPHP | 5462 Messages

01 nov. 2010, 23:31

tu peux le faire en CSS ca

Hélène
Invité n'ayant pas de compte PHPfrance

02 nov. 2010, 00:34

Bonsoir,
Euh.. pas vraiment. Je ne pense pas que les CSS puissent m'aider.

Je cherche à faire une boucle pour remplacer tous mes <h2> par un <h2 class="element_$i"> avec $i qui varie de 0 à x, x étant le nombre d’occurrences dans ma chaine de caractère.

Merci pour ta réponse

ViPHP
ViPHP | 5462 Messages

02 nov. 2010, 00:43

tu peux faire ca DOMDocument c'est fait pour manipuler le HTML

Hélène
Invité n'ayant pas de compte PHPfrance

02 nov. 2010, 01:01

ah oui ? Pourrais tu être plus précis ? Je ne connais pas

ViPHP
ViPHP | 5462 Messages

02 nov. 2010, 01:25

ah oui ? Pourrais tu être plus précis ? Je ne connais pas
il faut creer un objet DOMDocument, tu charges ton html avec la methode loadHTML, apres il va falloir faire un requete xpath pourl es h2 c'est simple c'est //h2
ca va te rendre une liste de tout tes H2, il suffis de leur rajoute l'attribut class

(ca parait compliquer mais en 10 lignes c'est fais) :wink:

Hélène
Invité n'ayant pas de compte PHPfrance

02 nov. 2010, 03:05

Merci. Concept un peu nouveau pour moi, je ne suis pas sur de bien comprendre.
Aurais-tu un exemple à me proposer ?

ViPHP
ViPHP | 5462 Messages

02 nov. 2010, 12:55

comment tu va créer tes classes CSS après ?

Hélène
Invité n'ayant pas de compte PHPfrance

02 nov. 2010, 23:22

je voudrais avoir à la fin quelque chose comme
<h2 class="element1"> (...)</h2>
<p> (...) </p>
<h2 class="element2"> (...)</h2>
<p> (...) </p>
<h2 class="element3"> (...)</h2>
<p> (...) </p>
<h2 class="element4"> (...)</h2>
<p> (...) </p>
tu vois ? Car ainsi je pourrai appliquer un style CSS ainsi qu'une action Jquery dessus.
Pour l’instant je bataille juste avec le fait que je n'ai aucune indexation pour les h2.

ViPHP
ViPHP | 5462 Messages

02 nov. 2010, 23:56

pas besion non plus avec jquery tu peux aller cherche tout les H2, de plus c'est plutot l'id pour l'identifiant uniquement et class pour le style :wink:

ViPHP
ViPHP | 2291 Messages

03 nov. 2010, 00:07

Salut,

Simplement comme ceci peut-être ?
<?php
<?php
$donnee = array('<h2>(ceci est un test1)</h2>',
                '<h2>(ceci est un test2)</h2>',
                '<h2>(ceci est un test3)</h2>');


	foreach($donnee as $key => $row)
	{

		$element = 'element'.($key +1);

		echo $remplacement = str_replace('<h2>', '<h2 class="'.$element.'">', $row);
		echo '<p>(.....)</p>';
    }

?>
A+
PS : Ceci dis la solution est trés discutable :)
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 2577 Messages

03 nov. 2010, 15:17

bonjour

$t = explode('<h2>',$texte);
£i = 0;
$r = '',
foreach ($t as $s) {
£i++;
$r .= '<h2 classe="element'.$i.'>".$s;
}

Hélène
Invité n'ayant pas de compte PHPfrance

12 nov. 2010, 04:51

BRAVO !!!
c'est exactement ça que je cherchais, merci beaucoup.