function fillwithspan($argot,$trid){
if(strpos($argot,'(1)')!==false){
$argot=str_replace('(1)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_1\');" onMouseout="cache(\'l'.$trid.'_1\');">(1)</span>',$argot);
}
if(strpos($argot,'(2)')!==false){
$argot=str_replace('(2)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_2\');" onMouseout="cache(\'l'.$trid.'_2\');">(2)</span>',$argot);
}
if(strpos($argot,'(3)')!==false){
$argot=str_replace('(3)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_3\');" onMouseout="cache(\'l'.$trid.'_3\');">(3)</span>',$argot);
}
if(strpos($argot,'(4)')!==false){
$argot=str_replace('(4)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_4\');" onMouseout="cache(\'l'.$trid.'_4\');">(4)</span>',$argot);
}
if(strpos($argot,'(5)')!==false){
$argot=str_replace('(5)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_5\');" onMouseout="cache(\'l'.$trid.'_5\');">(5)</span>',$argot);
}
if(strpos($argot,'(6)')!==false){
$argot=str_replace('(6)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_6\');" onMouseout="cache(\'l'.$trid.'_6\');">(6)</span>',$argot);
}
if(strpos($argot,'(7)')!==false){
$argot=str_replace('(7)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_7\');" onMouseout="cache(\'l'.$trid.'_7\');">(7)</span>',$argot);
}
if(strpos($argot,'(8)')!==false){
$argot=str_replace('(8)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_8\');" onMouseout="cache(\'l'.$trid.'_8\');">(8)</span>',$argot);
}
if(strpos($argot,'(9)')!==false){
$argot=str_replace('(9)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_9\');" onMouseout="cache(\'l'.$trid.'_9\');">(9)</span>',$argot);
}
if(strpos($argot,'(10)')!==false){
$argot=str_replace('(10)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_10\');" onMouseout="cache(\'l'.$trid.'_10\');">(10)</span>',$argot);
}
if(strpos($argot,'(11)')!==false){
$argot=str_replace('(11)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_11\');" onMouseout="cache(\'l'.$trid.'_11\');">(11)</span>',$argot);
}
return $argot;
}
par
et, à ma grande surprise et satisfaction, j'obtiens le même résultat.
Je n'y comprends absolument rien, mais ça fonctionne impeccablement.
Merci à toi JC pour ta patience, promis dès que j'aurai retrouvé quelques neurones sains et un peu de temps, je chercherai à comprendre.
]]>Maintenant faut que je vois comment combiner ça avec preg_replace().
Ça me promet encore bien de l'amusement c't'affaire.
]]>C'est-y quoi ce flag PREG_OFFSET_CAPTURE ?
Si on ne peut plus se fier à la doc ...
]]>Je teste pour voir sir preg_match me trouve toutes les 'notes',...
Non Mk, comme je te l'ai dit avant, c'est un preg_match_all qui te les trouvera toutes.
]]>Et j'obtiens ces données
Array
(
[0] => Array
(
[0] => (1)
[1] => 19
)[1] => Array
(
[0] => 1
[1] => 20
)
)
Array
(
[0] => Array
(
[0] => (2)
[1] => 13
)
)
[1] => Array
(
[0] => 2
[1] => 14
)
)
Array
(
[0] => Array
(
[0] => (4)
[1] => 12
)[1] => Array
(
[0] => 4
[1] => 13
)
)
Array
(
[0] => Array
(
[0] => (5)
[1] => 36
)[1] => Array
(
[0] => 5
[1] => 37
)
)
Array
(
[0] => Array
(
[0] => (6)
[1] => 14
)[1] => Array
(
[0] => 6
[1] => 15
)
)
Où l'on voit bien que lorsqu'il y a plusieurs 'notes' dans une ligne, seule la première est détectée.
Dans la leçon 1 la ligne 2 comporte les 'notes' (2) et (3) et la ligne 11 les notes (6) et (7).
Alors que la constante PREG_OFFSET_CAPTURE, devrait assurer la capture de toutes les correspondances.
Le paramètre flags peut prendre l'une des valeurs suivantes :
PREG_OFFSET_CAPTURE
Si cette option est activée, toutes les sous-chaînes qui satisfont le masque seront aussi identifiées par leur offset. Notez que cela modifie la valeur de matches qui devient un tableau dont chaque élément est un tableau contenant la chaîne correspondant au masque à l'offset 0 ainsi que l'offset de la chaîne dans subject à l'offset 1.
Ce qui correspond bien au fait qu'il y ait des notes aux items 1, 2, 3, 6 et 11 et pas dans les autres. A ceci près que dans les items 2 et 11 il y a deux notes.
C'est normal tu lui demandes s'il en trouve au moins 1. Normalement le preg_replace() devrait remplacer toutes les occurrences s'il y en a, au même titre qu'un preg_match_all() te les retourneras tous.
]]>retourne, avec lecon0001.inc.php
1 1 1 0 0 1 0 0 0 0 1 0 0 0
Ce qui correspond bien au fait qu'il y ait des notes aux items 1, 2, 3, 6 et 11 et pas dans les autres. A ceci près que dans les items 2 et 11 il y a deux notes.
J'ai inséré au début du code de ma fonction
function fillwithspan($argot,$trid){
$pattern='#\(([0-9]+)\)#';
echo preg_match($pattern,'argot');
Question n'aurais-tu pas oublié un $ quelque part? parce que là je ne vois pas ce qu'il y a d'anormal dans la réponse que tu obtiens.^^
]]>Je ne t'oublie pas MK, j'ai juste la tête sous l'eau. Je reviens vers toi au plus tôt.
En doutais-je ?
En attendant fait un test en remplaçant ton pattern par le mien, voir ce que ça donne.
J'ai inséré au début du code de ma fonction
Et cela me retourne une jolie guirlande de 0 0 0 0 0 0
preg_match() retourne 1 si le pattern fourni correspond, 0 s'il ne correspond pas, ou FALSE si une erreur survient.
j'en conclus que ce pattern ne convient pas trop.
]]>Mais je crains de ne pas tout comprendre (comme souvent)
Le but est d'éventuellement remplacer dans $ligne['argot'] toute occurrence d'un nombre entre parenthèses par son équivalent encapsulé d'un <span> et de ses méthodes onmouseover() et onmouseout() en leur passant la valeur du nombre comme argument des fonctions montre() et cache().
Or preg_replace() attend trois arguments : le motif recherché, le texte de remplacement, la chaîne dans laquelle chercher et substituer.
Et c'est sur ce dernier point que je bute, j'ai deux pattern, un pour le preg_match et un pour le preg_replace, ça, d'accord.
Mais comment imbriquer le preg_match et le preg_replace ?
]]>par la capture du chiffre entre parenthèses qu'il contient lorsqu'il est présent avec un preg_match. (Faudra faire un test dessus avant d'appliquer le preg_replace)
Le pattern pour cela c'est un truc du genre
Et preg_replace est bien une fonction regex de substitution, donc je en vois aps ce qu'il y a d'incohérent à vouloir l'utiliser dans ce contexte.
]]>Excuse moi MK, mais il y a une chose que je n'ai pas compris dans ta démarche.
En général, le but d'une regexp quand il n'est pas de valider le contenu d'une chaîne, il est d'extraire des données, que l'on pourrait appeler "données sources", au sein d'une phrase (au sens générique ici) qui constitue alors les données brutes.
A partir de là, sauf erreur de ma part, tu disposes déjà des données sources qui sont représentées par ton tableau associatif $leçon.
Je pense que ton problème viens du fait que ton algo de mise en forme de données n'est pas pertinent dans le sens où il ne va pas au bout de ton besoin final de mise en forme.
++
]]>