Ir para conteúdo

Arquivado

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

Luis Paullo

Array + json_encode

Recommended Posts

salve pessoal...

 

to precisando da ajudo do pessoal que saca muito de array ai :lol:

 

preciso de uma saida assim e json:

 

pego do DB e do enconde mais num sai como eu quero =(

{
modulos: [{ 
	text:"Item 1", 
	leaf: true,
	url: 'Item1List.php'
},{ 
	text:"Item 2", 
	modulos: [{ 
		text:"Sub Item 1", 
		leaf: true,
		url: 'subItem1List.php'
	},{ 
		text:"Sub Item 2", 
		leaf: true,
		url: 'subItem2List.php'
	}]
},{ 
	text: "Item 3", 
	leaf:true,
	url: 'Item3List.php'
}]
}

isso imprimiria o seguinte

 

Item 1

|

Item 2

|__Item 1

|__Item 2

Item 3

|__ mais sub-Items ...

 

um menu tree.

 

problema q num to conseguindo faze isso com as arrays em php e depois da o encode =)

 

mais próximo q cheguei foi isso.

 

parece estar certo o problema que pra cada modulo tenho 2 itens e lista apenas 1 item

 

  function getParent(){

$sql = "SELECT * FROM `$this->_table` GROUP BY parent_id ORDER BY ordemMenu DESC";      

	$query = $this->getConn();
	$smt = $query->prepare($sql);
	$smt->execute();
	$res = $smt->fetchAll(PDO::FETCH_ASSOC);      
       foreach($res as $obj):				 
			$noson[] = array(
	   			'text'=> $obj['nomeMenu'], 
				'leaf'=> true,
				'url' =>$obj['linkMenu']);	

		$sql2 = "SELECT * FROM `$this->_table` WHERE idMenu =".$obj['parent_id'];      
				$smt = $query->prepare($sql2);
				$smt->execute(); 
				$res = $smt->fetchAll( PDO::FETCH_ASSOC ); 
			foreach($res as $pai){

				$nopai[] = array('text'=>$pai['nomeMenu'], 'modulos'=>$noson);
			}
	endforeach;	

			return $nopai;
}

SQL da tabela

-- phpMyAdmin SQL Dump
-- version 3.3.9.2
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tempo de Geração: Out 14, 2011 as 01:34 AM
-- Versão do Servidor: 5.5.10
-- Versão do PHP: 5.3.6

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Banco de Dados: `adm_v2`
--

-- --------------------------------------------------------

--
-- Estrutura da tabela `tb_menu`
--

CREATE TABLE IF NOT EXISTS `tb_menu` (
 `idMenu` int(11) NOT NULL AUTO_INCREMENT,
 `parent_id` int(5) DEFAULT '0',
 `nomeMenu` varchar(100) NOT NULL,
 `linkMenu` varchar(255) NOT NULL,
 `ordemMenu` int(5) NOT NULL,
 `subMenu` varchar(100) NOT NULL,
 `status` char(1) NOT NULL DEFAULT '1',
 `icon` varchar(100) DEFAULT NULL,
 PRIMARY KEY (`idMenu`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

--
-- Extraindo dados da tabela `tb_menu`
--

INSERT INTO `tb_menu` (`idMenu`, `parent_id`, `nomeMenu`, `linkMenu`, `ordemMenu`, `subMenu`, `status`, `icon`) VALUES
(1, 0, 'General Options', '', 0, '', '1', NULL),
(2, 1, 'Inicio', 'home.php', 0, '', '1', 'home.png'),
(3, 1, 'Gerinciar Menu', 'menu_manager.php', 1, '', '1', 'menu.png'),
(4, 0, 'Tarefas', '', 1, '', '1', NULL),
(5, 4, 'Eventos', 'evento.php', 2, '', '1', NULL),
(6, 4, 'Graficos', 'testes.php', 3, '', '1', NULL);

 

desde já agradeço a ajuda!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só de início, já vou dizer que você está errado nessa execução de querys .. não há necessidade disso, utilize um JOIN nas querys .. aí você já evita um loop ..

 

Dê uma olhada no seguinte :seta: http://helpmasters.com.br/artigo/94/menu-de-infinitos-niveis-com-apenas-uma-consulta-ao-bd

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.