Ir para conteúdo

POWERED BY:

Arquivado

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

rockrgo

Função recursiva

Recommended Posts

Boa tarde pessoal,

 

estou criando uma função recursiva para montar um menu dinâmico. Mas não está dando muito certo.

 

Possuo o seguinte código. O array simula os dados vindos do banco

<?php

$rs = array(
	array(
		'nro_menu' => 3136,
		'dsc_menu' => 'Pedidos',
		'nro_menu_fk' => 1,
		'nro_ordem_menu' => '{0}',
		'leaf' => 'n'
	),
	array(
		'nro_menu' => 3137,
		'dsc_menu' => 'Relatórios',
		'nro_menu_fk' => 1,
		'nro_ordem_menu' => '{1}',
		'leaf' => 'n'
	),
	array(
		'nro_menu' => 4119,
		'dsc_menu' => 'Lançar',
		'nro_menu_fk' => 3136,
		'nro_ordem_menu' => '{0,0}',
		'leaf' => 'y'
	),
	array(
		'nro_menu' => 4120,
		'dsc_menu' => 'Manutenção',
		'nro_menu_fk' => 3136,
		'nro_ordem_menu' => '{0,1}',
		'leaf' => 'y'
	),
	array(
		'nro_menu' => 3138,
		'dsc_menu' => 'Emitir Pedido',
		'nro_menu_fk' => 3137,
		'nro_ordem_menu' => '{1,0}',
		'leaf' => 'y'
	),
	array(
		'nro_menu' => 3139,
		'dsc_menu' => 'Pedidos Colocados No Mês',
		'nro_menu_fk' => 3137,
		'nro_ordem_menu' => '{1,1}',
		'leaf' => 'y'
	),
	array(
		'nro_menu' => 3140,
		'dsc_menu' => 'Histórico Do Cliente',
		'nro_menu_fk' => 3137,
		'nro_ordem_menu' => '{1,2}',
		'leaf' => 'y'
	),
	array(
		'nro_menu' => 3141,
		'dsc_menu' => 'Entregas Efetuadas',
		'nro_menu_fk' => 3137,
		'nro_ordem_menu' => '{1,3}',
		'leaf' => 'y'
	)
);


/*Início da função buildTree*/
function buildTree(array &$tree, array $elements, $parentId = 1) {

	foreach ($elements as $element) {
        if ($element['nro_menu_fk'] == $parentId) {
            $children = buildTree($tree, $elements, $element['nro_menu']);			
            if ($children) {
                $tree[$element['dsc_menu']][$children['dsc_menu']] = $children['nro_menu'];
			}else{
            	$tree[$element['dsc_menu']] = array();
			}
			return $element;
        }
		
    }    
}
/*Fim da função buildTree*/



$tree = array();
buildTree($tree, $rs);
echo "<pre>", print_r($tree, true);


O mais próximo que cheguei foi isso

Array
(
    [Lançar] => Array
        (
        )

    [Pedidos] => Array 
        (
            [Lançar] => 4119
        )

)

Mas deveria ficar assim

Array
(

    [Pedidos] => Array
        (
            [Lançar] => 4119
            ...
        )

    ... 

)

Espero que possam me ajudar! Valeu !!

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.