Bonjour,
à un tableau donné, dont la structure peut fortement ressembler à celle qui suit :
(bien sûr, ayant réécrit les phrases pour l'exemple, on s'en fout des compteurs de chaînes... ce n'est pas ça qui compte)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 array(19) { [0]=> string(71) "Ceci est du texte -" [1]=> string(35) "Ceci est un paragraphe ?!" [2]=> string(0) "" [3]=> string(0) "" [4]=> string(51) "* Auteur a écrit:" [5]=> string(78) "> Oui, parce qu'il a dit !!!" [6]=> string(1) ">" [7]=> string(1) ">" [8]=> string(32) "> Author wrote:" [9]=> string(63) ">> * Auteur a écrit : le [18-05-2019 07:22:51 +0200]:" [10]=> string(61) ">>> Cette phrase qui n'a aucun sens !" [11]=> string(17) ">>> N'est-ce pas ?" [12]=> string(16) ">> Oui, en effet !" [13]=> string(4) "> --" [14]=> string(71) "> Première ligne de suite" [15]=> string(6) "> ----" [16]=> string(49) "> Deuxième ligne de signature" [17]=> string(37) "> Troisième ligne de signature" [18]=> string(1) ">" [19]=> string(0) [20]=> string(1) "!" }
- Dans un premier temps, je recherche la présence d'une chaîne qui commence par '* ' pour lui supprimer ce caractère '*' - d'ailleurs, on remarquera que je fais quasiment le même traitement dans le contexte où j'ai la présence de '>' devant '*'... dixit ligne ci-dessous.
- Dans un second temps, je veux traiter la présence des chaînes qui commencent absolument par '>' pour ensuite les traiter, sachant que s'il y en a plusieurs, la première commence absolument par un seul '>' et que les lignes suivantes peuvent avoir par imbrication la présence d'un ou plusieurs '>'. (pour schématiser, on va dire que ce sont des blocs de futures citations, tel le codage en Markdown).
- Le tableau peut finir par la présence de différents caractères ou non...
Mon début de code PHP ressemble à ceci - et j'ai le terrible sentiment que je m'y prend très mal :
Une idée à me soumettre ? merci d'avance...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 function mngMain($main) { $sign = false; foreach($main as $key => $line) { // if line start with '*' and end with ':'... if(strpos($line, '* ', 0) !== FALSE) { $main[$key] = preg_replace('/^\* (.*?):$/',"\n".'${1}:', $line); } /* * Treatment for blockquote: search all lines started with '>'. * * */ if(strpos($line, '>', 0) !== FALSE) { // if line is only '> --', rewrite with start code block MD if(strcmp($line, '> --') == 0) { $sign = true; $main[$key] = ">\n \n> ```"; } // if line start with '> *' elseif(strpos($line, '> *', 0) !== FALSE) { $main[$key] = preg_replace('/^\> \* (.*?):$/',"\n".'> ${1}:', $line); } // ici je cherche à traiter les correspondances pour injecter un même pattern en début de la première ligne correspondante, // et en fin de la dernière ligne correspondante... // et/ou sur la même ligne si seule et si elle(s) existe(nt) elseif(strpos($line, '>>', 0) !== FALSE) { preg_match('/^>>/', $line, $m); var_dump($m); } else $main[$key] = $line; $index = $key; } } unset($key, $line); if($sign) $main[$index] = $main[$index]."```\n"; return $main; }
Partager