Ir para conteúdo

POWERED BY:

Arquivado

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

Luciano Paker

Montar Array com dados vindos do Mysql

Recommended Posts

Boa Tarde,

 

Sou novato em PHP, e estou precisando de uma ajuda.

 

Quero montar um esquema de Arrays dinâmicos com dados vindos do mysql, a estrutura final de arrays é esta:

 

$menu_items = array(
(object) array('id'=>'1', 'name'=>'Home', 'url'=>'index.php', 'idpai'=>'0'),
(object) array('id'=>'2', 'name'=>'Products', 'url'=>'#', 'idpai'=>'0'),
(object) array('id'=>'3', 'name'=>'About', 'url'=>'about.php', 'idpai'=>'0'),
(object) array('id'=>'4', 'name'=>'Contact', 'url'=>'#', 'idpai'=>'0'),
(object) array('id'=>'5', 'name'=>'Apparel', 'url'=>'#', 'idpai'=>'2'),
(object) array('id'=>'6', 'name'=>'Shirts', 'url'=>'Shirts.php', 'idpai'=>'2'),
(object) array('id'=>'7', 'name'=>'Pants', 'url'=>'Pants.php', 'idpai'=>'2'),
(object) array('id'=>'8', 'name'=>'Hats', 'url'=>'#', 'idpai'=>'5'),
(object) array('id'=>'9', 'name'=>'Gloves', 'url'=>'Gloves.php', 'idpai'=>'5'),
(object) array('id'=>'10', 'name'=>'Ballcaps', 'url'=>'Ballcaps.php', 'idpai'=>'8'),
(object) array('id'=>'11', 'name'=>'Beanies', 'url'=>'#', 'idpai'=>'8'),
(object) array('id'=>'12', 'name'=>'Wool', 'url'=>'Wool.php', 'idpai'=>'11'),
(object) array('id'=>'13', 'name'=>'Polyester', 'url'=>'Polyester.php', 'idpai'=>'11'),
(object) array('id'=>'14', 'name'=>'Jimsider.com', 'url'=>'Jimsider.php', 'idpai'=>'4'),
);
A estrutura do banco é esta:
CREATE TABLE IF NOT EXISTS `pagina` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(45) NOT NULL,
`url` text NOT NULL,
`idpai` int(11) NOT NULL,
`status` int(1) NOT NULL default '1',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

 

Agradeço desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

quando se faz um select e utiliza dependendo do tipo de conexão vou dar o exemplo que a maioria usam, mysql_fetch_array(); todos os dados vem como array.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este é um exemplo de como puxar uma array de um BD.

$servidor = "localhost"; 
$usuario = "user"; 
$senha = "senha"; 
$banco = "bd"; 
$conexao = mysql_connect($servidor,$usuario,$senha);  
mysql_select_db($banco); 


$res = mysql_query("SELECT * FROM pagina"); 
$escrever=mysql_fetch_array($res);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso, mas a minha dúvida é como gerar essa estrutura de arrays, eu não estou entendendo esses arrays dentro do outro e tambem este (object).

 

Quero que esta estrutura seja preenchida com os dados do BD, pois, depois irei usar este array "$menu_items".

 

$menu_items = array(

(object) array('id'=>'1', 'name'=>'Home', 'url'=>'index.php', 'idpai'=>'0'),

(object) array('id'=>'2', 'name'=>'Products', 'url'=>'#', 'idpai'=>'0'),

(object) array('id'=>'3', 'name'=>'About', 'url'=>'about.php', 'idpai'=>'0'),

);

 

 

Por favor, alguém poderia me dar uma ajuda???

 

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Luciano Paker

 

Pegando o código do nosso amigo [Tassio N.]

$servidor = "localhost"; 
$usuario = "user"; 
$senha = "senha"; 
$banco = "bd"; 
$conexao = mysql_connect($servidor,$usuario,$senha);  
mysql_select_db($banco); 


$res = mysql_query("SELECT * FROM pagina"); 

já vem como array e só usar ficando assim

 

 

while($escrever=mysql_fetch_array($res)){
 echo $escrever['nome'];
 echo $escrever['url'];
 echo $escrever['id'];
 echo $escrever['abckdklkjhaskldksa'];

}

 

 

 

 

 

Este post solucionou a sua dúvida, peço que coloque como resolvido e me der um ponto positivo de reputação para que eu possa continuar ajudando outros colegas como você.

Caso não solucione o seu problema, peço que coloque a sua dúvida abaixo.

 


Att: João Paulo Sousa Supriano

Compartilhar este post


Link para o post
Compartilhar em outros sites

caro @paulinhosupriano ele não quer só a solução, ele quer entender a estrutura do código.

 

(object) é um cast que transforma aquele índice do array em objeto.

 

Se você imprimir a variavel:

$menu_items = array(
(object) array('id'=>'1', 'name'=>'Home', 'url'=>'index.php', 'idpai'=>'0'),
(object) array('id'=>'2', 'name'=>'Products', 'url'=>'#', 'idpai'=>'0'),
(object) array('id'=>'3', 'name'=>'About', 'url'=>'about.php', 'idpai'=>'0'),
);

você vai ter a seguinte saída:

 

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [name] => Home
            [url] => index.php
            [idpai] => 0
        )

    [1] => stdClass Object
        (
            [id] => 2
            [name] => Products
            [url] => #
            [idpai] => 0
        )

    [2] => stdClass Object
        (
            [id] => 3
            [name] => About
            [url] => about.php
            [idpai] => 0
        )

)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Correto amigo Raphael, mas no caso do nosso amigo luciano esta criando uma matriz com objetos e teria que ser tratado para mostrar os resultados, para se mais simples uma consulta com resultados como objetos:

 

$res = mysql_query("SELECT * FROM pagina");
$obj=mysql_fetch_object($res);


echo $obj->nome;

http://php.net/manual/pt_BR/function.mysql-fetch-object.php

 

Não sei se você conseguiu este código na internet ou de algum tutorial, mas o mais facil para seu aprendizado até se familiarizar com a linguagem Luciano é voce usar como o amigo paulinho te indicou, de uma olhada no link acima que possui muitas informações que poderão lhe ajudar no trabalho com php/mysql;

espero ter ajudado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Correto amigo Raphael, mas no caso do nosso amigo luciano esta criando uma matriz com objetos e teria que ser tratado para mostrar os resultados, para se mais simples uma consulta com resultados como objetos:

 

$res = mysql_query("SELECT * FROM pagina");
$obj=mysql_fetch_object($res);


echo $obj->nome;

http://php.net/manual/pt_BR/function.mysql-fetch-object.php

 

Não sei se você conseguiu este código na internet ou de algum tutorial, mas o mais facil para seu aprendizado até se familiarizar com a linguagem Luciano é voce usar como o amigo paulinho te indicou, de uma olhada no link acima que possui muitas informações que poderão lhe ajudar no trabalho com php/mysql;

espero ter ajudado

 

Corretíssimo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde pessoal,

 

É isso mesmo Tiago, achei esse código na internet, vou usá-lo para fazer um Menu dinâmico, montando ele no formato exigido pelo Bootstrap, segue o link http://www.jimsider.com/twitter-bootstrap-infinite-menu-php/

 

Raphael e Eduardo, é isso ai, também queria entender a estrutura do código, pois, ainda não programo em OO.

 

Obrigado a todos que estão me ajudando...

 

Agora quero saber como faço um LOOP para poder preencher esse array dinamicamente com os dados vindos de uma consulta mysql, sem quebrar esta estrutura de Arrays?

 

Exemplo:

 

$menu_items = array(

 

foreach($resultado_sql as $res){

 

(object) array('id'=>$sql[id], 'name'=>$sql[name], 'url'=>$sql, 'parent_menu_id'=>$sql[idpai]),

Compartilhar este post


Link para o post
Compartilhar em outros sites


<?php

 

$servidor = "localhost";

$usuario = "user";

$senha = "pass";

$banco = "banco";

$conexao = mysql_connect($servidor,$usuario,$senha);

mysql_select_db($banco);

 

 

$res = mysql_query("SELECT * FROM tabela");

 

$menu_items = null ;

 

// COMENTE ESTE BLOCO DE WHILE CASO VÁ FAZER LOOP COM FETCH ASSOC

// USANDO FETCH OBJETO

while($ln = mysql_fetch_object($res)){

$menu_items[] = $ln;

}

//----------------------------------------------------

 

// COMENTE ESTE BLOCO DE WHILE CASO VÁ FAZER LOOP COM FETCH OBJECT

// OU USANDO FETCH ASSOC

while($ln = mysql_fetch_assoc($res)){

$menu_items[] =array(

'id' =>$ln['id'] ,

'name' =>$ln['name'],

'url' =>$ln['url'],

'parent_menu_id'=>$ln['idpai']

);

 

}

 

var_dump($menu_items);

 

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia,

 

Raphael, o código que você passou deu certinho... só tive que incluir o (object) na atribuição do array. Funcionou perfeitamente.

 

Tiago, o menu q estou fazendo é em Bootstrap, ele tem um esquema de <ul> e <li> diferentes, mas vou aproveitar seu menu e usar em outros projetos. Obrigado.

 

Vou postar o código final aqui.

 

FUNÇÃO

 

function Menu($tabela, $condicao = NULL, $mostrar_campos = NULL){

$mostrar_campos = ($mostrar_campos <> NULL ? $mostrar_campos : "*");
$query = "SELECT {$mostrar_campos} FROM {$tabela} {$condicao}";
$string_query = mysql_query($query) or die('Erro no Select na Tabela '.$tabela.' '.mysql_error());
while($ln = mysql_fetch_assoc($string_query)){
$menu_items[] = (object) array(
'id' =>$ln['id_pagina'] ,
'name' =>$ln['nome_pagina'],
'url' =>$ln['url_pagina'],
'parent_menu_id'=>$ln['idpai_pagina']
);
}
return $menu_items;
}

 

 

MENU

 

<?
$menu_items = Menu("pagina", "ORDER BY idpai_pagina");
?>
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container-fluid">
<a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a href="http://172.18.52.10" class="brand" title="Sitema Materno - Hospital e Maternidade Municipal de Uberlândia"><img src="img/logo.png" border="0"></a>
<div class="nav-collapse">
<ul class="nav">
<?php
global $menuItems;
global $parentMenuIds;
//create an array of parent_menu_ids to search through and find out if the current items have an children
foreach($menu_items as $parentId)
{
$parentMenuIds[] = $parentId->parent_menu_id;
}
//assign the menu items to the global array to use in the function
$menuItems = $menu_items;
//recursive function that prints categories as a nested html unorderd list
function generate_menu($parent){
$has_childs = false;
//this prevents printing 'ul' if we don't have subcategories for this category
global $menuItems;
global $parentMenuIds;
//use global array variable instead of a local variable to lower stack memory requierment
foreach($menuItems as $key => $value){
if ($value->parent_menu_id == $parent){
//if this is the first child print '<ul>'
if ($has_childs === false){
//don't print '<ul>' multiple times
$has_childs = true;
if($parent != 0){
echo '<ul class="dropdown-menu">';
}
}
if($value->parent_menu_id == 0 && in_array($value->id, $parentMenuIds)){
echo '<li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#">' . $value->name . '<b class="caret"></b></a>';
}else if($value->parent_menu_id != 0 && in_array($value->id, $parentMenuIds)){
echo '<li class="dropdown-submenu"><a href="#">' . $value->name . '</a>';
}else{
echo '<li><a href="'.$value->url.'">' . $value->name . '</a>';
}
generate_menu($value->id);
//call function again to generate nested list for subcategories belonging to this category
echo '</li>';
}
}
if($has_childs === true){
echo '</ul>';
}
}
generate_menu(0);
?>
</li>
</ul>
<ul class="nav pull-right">
<li><a href="#">Usuário Logado: <b>6321865</b></a></li>
<form action="" class="navbar-search pull-left">
<button type="button" class="btn btn-info btn-mini"><i class="icon-wrench icon-white"></i> Alterar Dados</button>
<button type="button" class="btn btn-inverse btn-mini"><i class="icon-question-sign icon-white"></i> Sugestões</button>
<button type="button" class="btn btn-danger btn-mini"><i class="icon-off icon-white"></i> Sair</button>
</form>
</ul>
</div>
</div>
</div>
</div>

 

Gostaria de agradecer a todos pelo tempo e boa vontade em ajudar.

 

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.