Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Maykel-ctba

Transformar JSON em Array e este em string

Recommended Posts

Fala galera!

 

Tenho a seguinte necessidade:

 

String JSON:

[{"id":1},{"id":2,"children":[{"id":6}]},{"id":3},{"id":7}]

 

Isso é uma string que guarda a estrutura de um menu. Eu gostaria de converter esse JSON em Array, e este array formasse a string do menu, só que estou tendo um problema quando tenho itens aninhados (o children).

 

Usei json_decode($stringJSON) para converter em Array, e ficou assim:

 

Array:

Array
(
    [0] => stdClass Object
        (
            [id] => 1
        )

    [1] => stdClass Object
        (
            [id] => 2
            [children] => Array
                (
                    [0] => stdClass Object
                        (
                            [id] => 6
                        )

                )

        )

    [2] => stdClass Object
        (
            [id] => 3
        )

    [3] => stdClass Object
        (
            [id] => 7
        )

)

 

Gostaria que a partir desse array, eu conseguisse fazer uma string assim:

            <ol class="dd-list">
                <li class="dd-item" data-id="1">
                    <div class="dd-handle">A Empresa</div>
                </li>
                <li class="dd-item" data-id="2">
                    <div class="dd-handle">Produtos</div>
                    <ol class="dd-list">
                        <li class="dd-item" data-id="6"><div class="dd-handle">Produto 01</div></li>
                    </ol>
                </li>
                <li class="dd-item" data-id="3">
                    <div class="dd-handle">Serviços</div>
                </li>
                <li class="dd-item" data-id="7">
                    <div class="dd-handle">Fale conosco</div>
                </li>
            </ol>

 

Mas não estou conseguindo fazer direito, dá erro:

 

Fatal error: Cannot use object of type stdClass as array in /Applications/XAMPP/xamppfiles/htdocs/sistema/modulo/menu.php on line 320

 

PHP que estou usando:

// * Gera o menu a partir da estrutura salva em JSON
$menuEstrutura = json_decode($objRegistro->Estrutura()); // Converte a estrutura JSON em array para manipular
									
for($i = 0; $i < count($menuEstrutura); $i++)
{										    
    $listaSecaoFinal .= "<li class=\"dd-item\" data-id=\"".$menuEstrutura[$i]['id']."\"><div class=\"dd-handle\">Item ".$menuEstrutura[$i]['id']."</div></li>";
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
$menuEstrutura[$i]->id

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os internos são outro array, dentro do array.

 

vc precisa de um loop encaixado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não ficou muuuuuito bonito, mas parece ter funcionado! ;-)

 

for($i = 0; $i < count($menuEstrutura); $i++)
{
	$objSecao->ID($menuEstrutura[$i]->id);
	$objSecao->retornar();
	$listaSecaoFinal .= "<li class=\"dd-item\" data-id=\"".$menuEstrutura[$i]->id."\"><div class=\"dd-handle\">".$objSecao->Nome()."</div>";
										
	if(!empty($menuEstrutura[$i]->children))
	{
		$listaSecaoFinal .= "<ol class=\"dd-list\">";				$arrayInternos = $menuEstrutura[$i]->children;
											
		for($y = 0; $y < count($arrayInternos); $y++)
		{
			$objSecao->ID($arrayInternos[$y]->id);
			$objSecao->retornar();
			$listaSecaoFinal .= "<li class=\"dd-item\" data-id=\"".$arrayInternos[$y]->id."\"><div class=\"dd-handle\">".$objSecao->Nome()."</div>";
		}
											
		$listaSecaoFinal .= "</ol>";
	}
										
	$listaSecaoFinal .= "</li>";
}

Muito obrigado pelas dicas, William!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.