Page 1 sur 1

Parcours de chaine et action différente pour chaque résultat

Posté : 09 oct. 2010, 19:00
par AkaiKen
Bonjour !
Je me place dans le forum "PHP débutant" car je me doute que ce que je cherche à faire est très simple, mais je ne trouve pas comment...
J'ai dans un texte quelconque en html une liste (donc <ul><li> etc), et je voudrais appliquer à certaines de ces balises <li> une classe particulière, mais pas à toutes, seulement à certaines, en random, une fois sur 10 par exemple.
J'avais pensé à un str_replace() dont l'argument $replacement serait un genre de
(rand(0,10) > 9) ? $onremplace : $onlaissetelquel
. Mais ça ne marche pas comme je voudrais : ça remplace toutes mes li, ou ça n'en remplace aucune (et à chaque rafraichissement de page, donc chaque appel du script, ça change, bien évidemment).

Je voudrais trouver un moyen de parcourir tout mon texte, et à chaque fois que je rencontre un li, je fais l'action de remplacer si rand() me renvoie la bonne valeur, et sinon je ne remplace pas. Et ça, je n'y arrive pas.

Quelqu'un pourrait éclairer ma lanterne ?

Merci d'avance !

Re: Parcours de chaine et action différente pour chaque résultat

Posté : 09 oct. 2010, 19:23
par Aureusms
Essaye via preg_match :
1. Tu identifie tous les <li> via preg_match qui te retourne le tout dans un tableau indexé
2. Tu créé un nombre aléatoire compris entre 1 et le maximum de clef du tableau indexé
3. tu fais un str_replace de la chaine HTML à la position du tableau indexé indiqué par le nombre aléatoire
<?php
preg_match ('#<li>(\w+)</li>#',$ton_HTML,$liste_des_li);
$count_li = count ($liste_des_li);
$nombre_aleatoire = rand (1,$count_li-1);

$ton_HTML = str_replace ($liste_des_li[$nombre_aleatoire],$ton_nouveau_texte,$ton_HTML);

?>

Re: Parcours de chaine et action différente pour chaque résultat

Posté : 09 oct. 2010, 20:25
par stealth35
pour parser du DOM c'est avec DOMDocument, c'est fait exprès pour :wink:

Re: Parcours de chaine et action différente pour chaque résultat

Posté : 09 oct. 2010, 21:46
par AB
Oui faudrait déjà savoir si tu as besoin de parcourir ou non le DOM...
C'est un fichier que tu génère toi-même ou un fichier que tu récupère sur le web ?

Re: Parcours de chaine et action différente pour chaque résultat

Posté : 09 oct. 2010, 22:29
par AkaiKen
C'est pour un blog, et je voudrais agir à la fois sur les listes qui pourraient se trouver dans des articles (et donc sur lesquels j'ai un contrôle total) et sur les listes dans la sidebar (liste d'articles, etc). Donc je pars du principe que je ne sais pas le contenu des li, leur nombre, ni leur position dans la page.

Ensuite, je n'ai pas forcément besoin de parcourir le DOM, je vais créer un hook (c'est un blog sous Wordpress) qui agira avant affichage de la page (si j'ai bien compris le système).

Je vais déjà essayer ta technique, Aureusms. Je vous tiens au courant :wink: merci de vos réponses rapides !