Vous n'êtes pas identifié(e).
Saluton,
J'ai l'array suivant
en fait je ne vous en ai mis que deux items. Je le parcours avec ce script
Ne vous occupez pas du Onclick("") pour la prononciation, ce n'est pas le problème ici.
Je voudrais obtenir ceci
Mais, bien entendu, ce n'est pas ce que j'obtiens
Je n'ai jamais été très fort pour les regexp et là je crois que je m'attaque à beaucoup trop gros pour moi.
Quelqu'un a-t-il une proposition à substituer à
Je précise que seuls m'intéressent les parenthèses qui enferment un chiffre de 1 à 9, car il peut y avoir des parenthèses enfermant des textes plus longs dans les $ligne['argot'].
S'il n'y avait pas de solution je modifierais les items 'argot' dans l'array, mais je préférerais laisser PHP le faire à ma place car il y a quand même 1400 items (14 lignes x 100 leçons), et d'autre part l'argument passé aux fonctions javascript montre() et cache() est un id de <tr> généré par PHP dans la boucle.
Merci de votre intérêt.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Saluton,
En attendant une solution avec preg_replace j'ai modifié mon script comme ceci:
et j'obtiens bien ce que je voulais:
Mais j'imagine qu'une astuce en regexp serait plus rapide (quoique).
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Saluton,
Ça se complique, je viens de tomber sur un cas où il y a une notre n°(10)
J'ai simplement ajouté cette rustine.
, mais cela démontre bien qu'une regexp serait plus universelle.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Bonjour,
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.
++
Dernière modification par Jc (05-07-2014 12:30:30)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Saluton,
Mon besoin de mise en forme finale est qu'au survol d'un numéro de note, par exemple (1) la note correspondante qui est par nature de type display:none devienne visible.
Ce que j'obtiens, par exemple sur cette page : http://www.avcxjo-moko-kantas.fr/LMAM/i … p?page=001Pour cela il faut que je rende réactive la zone (1) de l'item d'argot.
Comme la page est construite par PHP (il y aura in fine 100 pages de structure identique) les identifiants des lignes sont générés au fil de l'eau.
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.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Si tu veux garder le travail effectué je pense qu'il te suffit de remplacer $ligne['argot']
dans
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
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Merci Jc,
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 ?
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Je ne t'oublie pas MK, j'ai juste la tête sous l'eau. Je reviens vers toi au plus tôt.
En attendant fait un test en remplaçant ton pattern par le mien, voir ce que ça donne.
Dernière modification par Jc (10-07-2014 02:00:31)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
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.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Bonjour,
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.^^
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Evidemment bien sûr (le boulet !!!) :
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.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
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.
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bon j'essaye d'avancer sur cette affaire. Je teste pour voir sir preg_match me trouve toutes les 'notes', notamment quand il y en a plusieurs dans une même ligne.
J'ai donc modifié le script comme suit :
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.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Bonjour,
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.
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Ben, crénom ! qu'est-ce qui raconte dans la doc alors ?
C'est-y quoi ce flag PREG_OFFSET_CAPTURE ?
Si on ne peut plus se fier à la doc ...
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Bon, Ok, avec preg_match_all il me les trouve toutes.
Maintenant faut que je vois comment combiner ça avec preg_replace().
Ça me promet encore bien de l'amusement c't'affaire.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Tu n'es pas en forme mon bon MK^^
Comme je te l'ai expliqué, essaye mon pattern directement dans ton preg_replace il devrait se comporter comme le preg_match_all pour les remplacements.
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bon alors j'ai remplacé tout ce fourbis
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.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne