fork download
  1. <?php
  2.  
  3. function retornarInfo($texto, $classe) {
  4. $expressao = '~id="([\w]+)" class="'. $classe .'"~i';
  5. $casamento = preg_match($expressao, $texto, $resultado);
  6. return (($casamento == 1 ? $resultado[1] : ""));
  7. }
  8.  
  9. $documento = '<ul id="titulo1" class="titulo">
  10. <li>
  11. <p>TÍTULO I</p>
  12. </li>
  13. </ul>
  14. <ul id="artigo1" class="artigo">
  15. <li>
  16. <p>Art. 1º...</p>
  17. </li>
  18. </ul>
  19. <ul id="artigo2" class="artigo">
  20. <li>
  21. <p>Art. 2º ....</p>
  22. </li>
  23. </ul>
  24. <ul id="artigo3" class="artigo">
  25. <li>
  26. <p>Art. 3º ....:</p>
  27. </li>
  28. </ul>
  29. <ul id="artigo4" class="artigo">
  30. <li>
  31. <p>Art. 4º ....:</p>
  32. </li>
  33. </ul>
  34. <ul id="titulo2" class="titulo">
  35. <li>
  36. <p>TÍTULO II</p>
  37. </li>
  38. </ul>
  39. <ul id="capitulo1" class="capitulo">
  40. <li>
  41. <p>CAPÍTULO I</p>
  42. </li>
  43. </ul>
  44. <ul id="artigo5" class="artigo">
  45. <li>
  46. <p>Art. 5º ....:</p>
  47. </li>
  48. </ul>
  49. <ul id="capitulo2" class="capitulo">
  50. <li>
  51. <p>CAPÍTULO II</p>
  52. </li>
  53. </ul>
  54. <ul id="artigo6" class="artigo">
  55. <li>
  56. <p>Art. 6º ...</p>
  57. </li>
  58. </ul>
  59. <ul id="artigo7" class="artigo">
  60. <li>
  61. <p>Art. 7º ...</p>
  62. </li>
  63.  
  64. </ul>
  65. <ul id="artigo8" class="artigo">
  66. <li>
  67. <p>Art. 8º....:</p>
  68. </li>
  69. </ul>
  70. <ul id="artigo9" class="artigo">
  71. <li>
  72. <p>Art. 9º É as.</p>
  73. </li>
  74. </ul>
  75. <ul id="artigo10" class="artigo">
  76. <li>
  77. <p>Art. 10. ....</p>
  78. </li>
  79. </ul>
  80. <ul id="artigo11" class="artigo">
  81. <li>
  82. <p>Art. 11. ....</p>
  83. </li>
  84. </ul>
  85. <ul id="capitulo3" class="capitulo">
  86. <li>
  87. <p>CAPÍTULO III</p>
  88. </li>
  89. </ul>
  90. <ul id="artigo12" class="artigo">
  91. <li>
  92. <p>Art. 12. São brasileiros:</p>
  93. </li>
  94. </ul>';
  95.  
  96. function criarHierarquia($linhas){
  97. $informacoes = [];
  98. $indiceTitulo = $indiceCapitulo = "";
  99.  
  100. foreach ($linhas as $linha){
  101. $titulo = retornarInfo($linha, "titulo");
  102. $capitulo = retornarInfo($linha, "capitulo");
  103. $artigo = retornarInfo($linha, "artigo");
  104.  
  105. if (!empty($titulo))
  106. $indiceTitulo = $titulo;
  107. if (!empty($capitulo)){
  108. $indiceCapitulo = $capitulo;
  109. } elseif (!empty($artigo)){
  110. if (!empty($indiceCapitulo))
  111. $informacoes["titulo"][$indiceTitulo]["artigo"][$indiceCapitulo][] = $artigo;
  112. else
  113. $informacoes["titulo"][$indiceTitulo]["artigo"][] = $artigo;
  114. }
  115. }
  116. return $informacoes;
  117. }
  118.  
  119. $linhas = explode("<ul", $documento);
  120. $informacoes = criarHierarquia($linhas);
  121.  
  122. foreach ($informacoes as $info){
  123. foreach ($info as $titulo => $artigos){
  124. echo "{$titulo}" . PHP_EOL;
  125. foreach ($artigos as $artigo){
  126. foreach ($artigo as $capitulo => $subArtigo){
  127. if (is_array($subArtigo)){
  128. foreach($subArtigo as $capArtigo){
  129. echo "{$titulo}{$capitulo}{$capArtigo}" . PHP_EOL;
  130. }
  131. } else {
  132. echo "{$titulo}{$subArtigo}" . PHP_EOL;
  133. }
  134. }
  135. }
  136. }
  137. }
  138. ?>
Success #stdin #stdout 0.02s 24400KB
stdin
Standard input is empty
stdout
titulo1
titulo1artigo1
titulo1artigo2
titulo1artigo3
titulo1artigo4
titulo2
titulo2capitulo1artigo5
titulo2capitulo2artigo6
titulo2capitulo2artigo7
titulo2capitulo2artigo8
titulo2capitulo2artigo9
titulo2capitulo2artigo10
titulo2capitulo2artigo11
titulo2capitulo3artigo12