Array / Objeto / tabela

E aí galera, depois de um longo tempo sem postar absolutamente nada, eu volto. Hoje vou mostrar uma para que usei esses dias por pura preguiça, mas resolveu então foda-se.

Quando eu faço uma busca no banco ou consumo uma API, seu retorno é um array de objetos, esse é um exemplo é claro.

Ex:

Array ( [0] => stdClass Object ( [id] => 1 [tipo] => Em andamento [status] => 1 [created_at] => 2021-11-04 23:35:31 ) [1] => stdClass Object ( [id] => 2 [tipo] => Concluído [status] => 1 [created_at] => 2021-11-04 23:35:43 ) [2] => stdClass Object ( [id] => 3 [tipo] => Cancelado [status] => 1 [created_at] => 2021-11-04 23:35:51 ) )

A ideia é criar uma tabela com o resultado, porém isso de forma automática é claro, minha ideia é que tudo seja feito de forma automática, então criar a tabela e preencher os títulos e as colunas.

A primeira coisa é percorrer o array e pegar apenas os objetos.

  if($this->parametros['cal_evento'])
            foreach ($this->parametros['cal_evento'] as $key => $evento) {
                print_r($evento);
            }

Depois disso, vamos transformar esse objeto em array

if($this->parametros['cal_evento'])
            foreach ($this->parametros['cal_evento'] as $key => $evento) {
                print_r(get_object_vars($evento));
            }

O resultado fica assim:

Array ( [id] => 1 [tipo] => Em andamento [status] => 1 [created_at] => 2021-11-04 23:35:31 ) Array ( [id] => 2 [tipo] => Concluído [status] => 1 [created_at] => 2021-11-04 23:35:43 ) Array ( [id] => 3 [tipo] => Cancelado [status] => 1 [created_at] => 2021-11-04 23:35:51 )

Pronto agora que os objetos são arrays eu consigo pegar os títulos de cada coluna para usar na minha tabela, para pegar os títulos usamos o método array_keys, ele retorna apenas os títulos de um array.

Como neste caso eu sei que os objetos te um mesmo formato consigo fazer isso

$titulos = array_keys(get_object_vars($this->parametros[‘cal_evento’][0]));

Agora o código completo da brincadeira ficou assim:

            echo '<table><tbody>';
            if ($this->parametros['cal_evento']) {
                $titulos = array_keys(get_object_vars($this->parametros['cal_evento'][0]));
                echo '<tr>';
                foreach ($titulos as $key => $titulo) 
                    echo '<th>'.$titulo.'</th>';
                echo '</tr>';
                foreach ($this->parametros['cal_evento'] as $key => $evento) {
                    echo '<tr>';
                    foreach ($titulos as $key => $titulo)
                        echo '<td>'.$evento->$titulo.'</td>';
                    echo '</tr>';
                }
            }
            echo '</tbody></table>';

Provavelmente dever haver uma forma melhor de fazer isso, mas eu adoro gambiarras.

Deixe um comentário