Bonjour,

à un tableau donné, dont la structure peut fortement ressembler à celle qui suit :
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) "!"
}
(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)

- 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 :

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;
    }
Une idée à me soumettre ? merci d'avance...