Ill formatou HTML de um loop PHP

Estou passando por uma matriz e construindo tabelas. O HTML é então enviado para o DOMPDF. No entanto, o DOMPDF não criará o PDF se o HTML estiver mal formatado. Eu suponho que é o que está acontecendo no meu caso. Aqui está o meu loop:

  
Title Role Director

Eu não posso para a vida de mim descobrir qual tag eu não estou fechando. Se alguém pudesse dar uma visão, isso seria fabuloso!

Especificamente, o loop está criando linhas que mostram alguns títulos e, em seguida, cuspir outras linhas sempre que o título da categoria muda.

Esta pode ser uma solução simples, mas talvez não seja a melhor:

Eu recomendo que você use a class Tidy do PHP (eventualmente você terá que instalá-la primeiro …)
Aqui está o link para o Manual da class Tidy .

Na primeira linha:

 ob_start(); 

Este comando protege tudo o que é ultrapassado pelo seu script de seguimento.
O código abaixo deve ser adicionado no final do seu arquivo, ou lá onde você deseja mostrar o resultado.
Primeiro obtém o buffer com ob_get_contents() e do que limpa o código.
Note que, eventualmente, você precisará alterar os parâmetros de configuração para suas necessidades, realmente há muito.

 $raw_output = ob_get_clean(); $config = array('indent' => true, 'output-xhtml' => true, 'wrap' => 0); $tidy = new Tidy; $tidy->parseString($raw_output, $config, 'utf8'); $tidy->cleanRepair(); echo $tidy; 

Este Código de Exemplo foi modificado pela versão original do exemplo no php.net .

Espero que ajude você.

É um pouco difícil de analisar sem saber mais sobre seus dados. Por exemplo, por que uma tabela de crédito “curto” é aberta e fechada com o registro, mas a tabela para crédito “longo” está condicionada ao registro anterior? É porque você tem uma estrutura de dados plana, de modo que os dados relacionados aparecem como uma série de linhas consecutivas? Se esse for o caso, as coisas seriam mais fáceis se os dados fossem um pouco mais normalizados. Ou seja, você poderia fazer uma iteração através de cada registro de crédito, em seguida, através dos detalhes separadamente. Alguma possibilidade de consertar sua estrutura de dados?

Analisando o código que você possui, seu problema parece estar na lógica da segunda seção do código. Você está definindo o valor da variável $oldvalue no final do loop. Isto é depois da lógica que fecha a tabela. Então, se você analisar dois registros que tenham o mesmo título de categoria, o segundo registro emitirá linhas de tabela completamente fora de uma tabela (não importa que também tenha uma linha completamente vazia). Além disso, se você tiver um tipo de crédito curto após uma longa, a tabela nunca será fechada.

Dito isto, trabalhando com o que você tem, acho que você pode precisar de algo como o seguinte:

 // build a dummy "previous" record for the first iteration so the conditionals don't break. null,'category'=>null); ?>       
Title Role Director

(Esse é um código feio e não tenho tempo para continuar a revisá-lo, então … wiki da comunidade no caso de alguém querer limpá-lo.)