• 0
Sign in to follow this  
Heltinhu

Ajuda com Array

Question

ola galera preciso da ajuda doceis com um array, vou tentar explicar o que estou quebrando a cuca kkkkk

seguinte esse Json é pra um aplicativo de cardapio de restaurante enfim funcionará assim...

tenho duas tabelas no banco de dados mysql -

CATEGORIAS e outra tabela ITENS

as categorias são cadastradas na Tabela CATEGORIAS tipo [1]PIZZAS / [2]BEBIDAS / [3]LANCHES / [4]COMBO e por aí vai....

Já na tabela ITENS o estabelecimento irá cadastrar os itens referentes a cada categoria por exemple:

[1]PIZZAS->Calabresa / [1]Pizzas->Bacon / [1]Pizzas->Frango / [2]Bebidas->Refri / [2]Bebidas->Breja / [2]Bebidas->LatinhasBreja etc etc etc

Agora vem a parte legal montar os array[]

Estou com esse código

<?php
$hostname = 'localhost';
$username = 'root';
$password = '1234';
$database  = 'testes';

$conexao = mysqli_connect("$hostname", "$username", "$password", "$database");

$sql = "SELECT * FROM categoria_itens INNER JOIN categoria_lojas ON (categoria_itens.categoria_id = categoria_lojas.id_categoria)";
$result = $conexao->query($sql);

    foreach ($result as $idx => $dado) {

       $categoria = $dado['categoria'];
       $id_categoria = $dado['id_categoria'];
       $item = $dado['item'];

      $json["cardapio"][] = [
                    "id_categoria" => $id_categoria,
                    "categoria"     => $categoria];
                    
   }

$resul = mb_convert_encoding($json, "utf-8", "LATIN1");

echo json_encode($resul,JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

echo '<pre>';
print_r($resul);

?>

essa consulta dessa forma esta me retornando desse jeito

Array
(
    [cardapio] => Array
        (
            [0] => Array
                (
                    [id_categoria] => 1
                    [categoria] => Pízzas
                )

            [1] => Array
                (
                    [id_categoria] => 1
                    [categoria] => Pízzas
                )

            [2] => Array
                (
                    [id_categoria] => 1
                    [categoria] => Pízzas
                )

            [3] => Array
                (
                    [id_categoria] => 1
                    [categoria] => Pízzas
                )

            [4] => Array
                (
                    [id_categoria] => 2
                    [categoria] => Bebidas
                )

            [5] => Array
                (
                    [id_categoria] => 2
                    [categoria] => Bebidas
                )

            [6] => Array
                (
                    [id_categoria] => 2
                    [categoria] => Bebidas
                )

            [7] => Array
                (
                    [id_categoria] => 2
                    [categoria] => Bebidas
                )

        )

)

pois bem esta me retornando 1 array com a categoria para cada item cadastrado e isso não é nada bom nhe digamos que eu tenha uns 500 ITENS cadastrados vai virar uma zona da pega kkkkkk

como ajuntar tudo isso e ainda colocar os ITENS cadastrados tudo dentro do array da mesma CATEGORIA tipo assim....

Array
(
    [cardapio] => Array
        (
            [0] => Array(
                    [id_categoria] => 1
                    [categoria] => Pízzas
             [1] = Array(
					[item] => Calabresa
					[item] => Bacon
					[item] => Frango
					[item] => Moda da Casa					
						)
                )



            [1] => Array(
                    [id_categoria] => 2
                    [categoria] => Bebidas
            [2] = Array(
					[item] => Refri
					[item] => Breja
					[item] => LatinhaBreja
					[item] => Dolly					
						)
                )
                
        )

)

bom gente seria mais ou menos isso acho q da pra entender nhe, trocando em miúdos, seria um cardápio de restaurante com  onde teriam as categorias e relativamente referente as categorias seus sub-itens

Pizzas[Calabresa, Bacon, Frango, Catupiry...]

Bebidas[Refri, Breja, Dolly, Latinha...]

Doces[Paçoquinha, Pave, ...]

porem tudo isso vindo lá meu banco de dados

me salvem aí

Share this post


Link to post
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Vou recriar o database aqui pra eu tentar entender.

 

--
-- CATEGORIAS DE LOJAS
--
drop table if exists categoria_lojas;
create table categoria_lojas(
    id_categoria int(11) PRIMARY KEY AUTO_INCREMENT,
    categoria varchar(25),
    status TINYINT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

insert into categoria_lojas(categoria) values
('Pizzas'),
('Bebidas'), 
('Lanches'), 
('Combos');

--
-- CATEGORIAS DE ITENS
--
drop table if exists categoria_itens;
create table categoria_itens(
    id_categoria int(11) PRIMARY KEY AUTO_INCREMENT,
    item varchar(15),
    categoria_id int(11),
    status TINYINT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    constraint foreign key (categoria_id) REFERENCES categoria_lojas(id_categoria) ON UPDATE CASCADE
);

insert into categoria_itens(categoria_id, item) values
	(1, 'Calabreza'),
	(1, 'Bacon'),
	(1, 'Frango'),
	(2, 'Refrigerante'),
	(2, 'Cerveja'),
	(2, 'Lata Cerveja'),
	(3, 'X-Tudo'),
	(3, 'X-Calabreza'),
	(3, 'X-Bacon'),
	(3, 'X-Frango'),
	(4, 'X-Lombo + Refrigerante + Batata Frita');

Seria +- assim?

 

Sugestão:

Conecte ao banco assim:

<?php
// variáveis para conexão em localhost
    $host = 'localhost';   // define o host do banco de dados
    $user = 'root';            // user do banco de dados
    $password = '';         // senha do banco de dados
    $database = 'scriptbrasil';  // nome do banco de dados

// estabelecer conexão com o mysql
$sqli = new mysqli($host, $user, $password);
// verificar se houve erro na conexão
if ($sqli->connect_error) {
    // se houve erro, mostra erro na tela
    echo "<p>Erro ao Conectar: $sqli->connect_error</p>";
}
// alterar o tipo de codificação da conexão com o banco de dados,  para utf8
if (!$sqli->set_charset('utf8')) {
    echo "<p class='error'>O charset não é utf8: $sqli->error</p>";
}
// selecionar/abrir o banco de dados para trabalhar
if (!$sqli->select_db($database)) {
    // se o banco de dados não for encontrado
    echo "<p class='error'>Banco de dados não encontrado, chefe!</p>";
}

Faça a busca assim:

<?php
// primeiro, busque apenas as categorias (pizzas, bebidas, lanches...)
$query = "SELECT id_categoria, categoria FROM categoria_lojas";

// execute a query
$result = $sqli->query($query);

// verifica se houve algum erro na execução da query
if ($sqli->error) {
	echo '<p class="error">Falha ao executar query, chefe!</p>' . $sqli->error;
	// se não houve erro algum e algum resultado foi encontrado
} elseif ($result->num_rows) {
	// busca os dados em formato de array associativo
	$dados = $result->fetch_all(MYSQLI_ASSOC);
} else { // se nenhum resultado foi encontrado
	echo '<p class="warning">Nenhuma categoria encontrada, chefe!</p>';
}


// se existirem categorias, busque os itens:
if(isset($dados)){
	foreach ($dados as $k => $v) {

		// defina uma query de busca para essa categoria
		$query = "SELECT id_categoria, item from categoria_itens where categoria_id = ".$v['id_categoria'];

		// execute a query
		$result = $sqli->query($query);

// verifica se houve algum erro na execução da query
		if ($sqli->error) {
			// se houve, mostra o erro na tela
			echo '<p class="error">Falha ao executar query, chefe!</p>' . $sqli->error;
	// se não houve erro algum e algum resultado foi encontrado
		} elseif ($result->num_rows) {
		// busca os itens em formato de array associativo
			$dados[$k]['itens'] = $result->fetch_all(MYSQLI_ASSOC);
} else { // se nenhum iten foi encontrado

	$dados[$k]['itens'] = [];
}
}
}

	<?php 

	echo json_encode($dados,JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

	echo '<pre>';
	print_r($dados);
	echo '</pre>';
	?>
 [{"id_categoria":"1","categoria":"Pizzas","itens":[{"id_categoria":"1","item":"Calabreza"},{"id_categoria":"2","item":"Bacon"},{"id_categoria":"3","item":"Frango"}]},{"id_categoria":"2","categoria":"Bebidas","itens":[{"id_categoria":"4","item":"Refrigerante"},{"id_categoria":"5","item":"Cerveja"},{"id_categoria":"6","item":"Lata Cerveja"}]},{"id_categoria":"3","categoria":"Lanches","itens":[{"id_categoria":"7","item":"X-Tudo"},{"id_categoria":"8","item":"X-Calabreza"},{"id_categoria":"9","item":"X-Bacon"},{"id_categoria":"10","item":"X-Frango"}]},{"id_categoria":"4","categoria":"Combos","itens":[{"id_categoria":"11","item":"X-Lombo + Refri"}]}]

Array
(
    [0] => Array
        (
            [id_categoria] => 1
            [categoria] => Pizzas
            [itens] => Array
                (
                    [0] => Array
                        (
                            [id_categoria] => 1
                            [item] => Calabreza
                        )

                    [1] => Array
                        (
                            [id_categoria] => 2
                            [item] => Bacon
                        )

                    [2] => Array
                        (
                            [id_categoria] => 3
                            [item] => Frango
                        )

                )

        )

    [1] => Array
        (
            [id_categoria] => 2
            [categoria] => Bebidas
            [itens] => Array
                (
                    [0] => Array
                        (
                            [id_categoria] => 4
                            [item] => Refrigerante
                        )

                    [1] => Array
                        (
                            [id_categoria] => 5
                            [item] => Cerveja
                        )

                    [2] => Array
                        (
                            [id_categoria] => 6
                            [item] => Lata Cerveja
                        )

                )

        )

    [2] => Array
        (
            [id_categoria] => 3
            [categoria] => Lanches
            [itens] => Array
                (
                    [0] => Array
                        (
                            [id_categoria] => 7
                            [item] => X-Tudo
                        )

                    [1] => Array
                        (
                            [id_categoria] => 8
                            [item] => X-Calabreza
                        )

                    [2] => Array
                        (
                            [id_categoria] => 9
                            [item] => X-Bacon
                        )

                    [3] => Array
                        (
                            [id_categoria] => 10
                            [item] => X-Frango
                        )

                )

        )

    [3] => Array
        (
            [id_categoria] => 4
            [categoria] => Combos
            [itens] => Array
                (
                    [0] => Array
                        (
                            [id_categoria] => 11
                            [item] => X-Lombo + Refri
                        )

                )

        )

)

 

Edited by wash

Share this post


Link to post
Share on other sites
  • 0

eeeita meu chefe perfect perfect perfect kkkkk vlw mesmo era exatamente isso. Só mais uma coisinha pra funcionar legal aqui

seguinte....

da uma olhada aqui....

http://www.androidbegin.com/tutorial/jsonparsetutorial.txt

ta vendo essa parte do Json, é a resposta nhe

JSONObject jobj = new JSONObject(jsonstr);
JSONArray jarray = jobj.getJSONArray("worldpopulation");

 

{ 
"worldpopulation":

por exemplo no meu seria o {"cardapio":

como acrescentar essa resposta nesse array - Json

Edited by Heltinhu
melhorar e formular melhor

Share this post


Link to post
Share on other sites
  • 0

heim galera e Sr Wash segue o raciocínio e estou quase terminando essa lenda kkkkkkk, mais vamos lá. Segui esse seu array e me ajudou bastante e esta quase pronto...

Porém vou tentar explicar o que esta acontecendo aqui comigo, seguinte estou trabalhando em um aplicativo para cardapio de restaurante como já expliquei. 

Eu tenho essa seguinte função

private void prepareLista(){
    lstGrupos = new ArrayList<String>();
    lstItensGrupo = new HashMap<String, List<Produto>>();

    StringRequest stringRequest = new StringRequest(Request.Method.GET,http://192.168.0.103/apps/pidoncho/v1/foodCategorias.php,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try{
                        JSONArray pro = new JSONArray(response);
                        for(int i = 0; i<pro.length();i++){

                            JSONObject proObj = pro.getJSONObject(i);
                            lstGrupos.add(proObj.getString("categoria"));//Categoria


                            JSONArray itemArray = new JSONArray(response);
                            List<Produto> foods = new ArrayList<>();
                            for(int j=0; j<itemArray.length(); j++){
                                foods.add(new Produto(proObj.getString("item"),17.9));
                            }
                                lstItensGrupo.put(lstGrupos.get(i),foods);
                        }
                        //cria um adaptador (BaseExpandableListAdapter) com os dados acima
                        listAdapter = new ExpandableListViewAdapter(MainActivity.this, lstGrupos, lstItensGrupo);
                        //define o apadtador do ExpandableListView
                        expListView.setAdapter(listAdapter);
                    }catch (JSONException e){
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_LONG).show();
                }
            });
    Volley.newRequestQueue(this).add(stringRequest);
}

esta função esta consultando lá no meu banco de dados mysql via Json na URL_Acima e me retornando as categorias lá cadastradas, porém os itens relacionados a categoria não vem. Acho que tenho que mudar alguma forma no meu array. Me ajudem aí por favor

Share this post


Link to post
Share on other sites
  • 0

deu e não deu ceerto kkkkkk

consigo listar todas as  

[categoria] => Pizzas | Bebidas ......

mais não consigo listar os 

[itens] => ......

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this