mkboy 1 Denunciar post Postado Janeiro 19, 2017 Bom dia, Estou montando um Json no PHP para envio. Os dados precisam ser apresentados como no quadro vermelho, no caso são dois registros. Portanto, estou fazendo um SELECT na tabela do Carrinho e preciso exibir os respectivos registros. Tentei colocar um WHILE ai, mas não aceita. Como faço isso no PHP? Agradeço desde já a atenção. Compartilhar este post Link para o post Compartilhar em outros sites
mkboy 1 Denunciar post Postado Janeiro 19, 2017 Postando em texto: $jSon = '{ "cep_origem": "'.$cepOrigem.'", "cep_destino": "'.$cepDestino.'", "valor_notafiscal": "'.$valorNf.'", "prazo_adicional": "'.$prazoAdicional.'", "preco_adicional": "'.$precoAdicional.'", "volumes": [ { "sku": "A-01", }, { "sku": "A-02", } ] }'; $jSon = '{ "cep_origem": "'.$cepOrigem.'", "cep_destino": "'.$cepDestino.'", "valor_notafiscal": "'.$valorNf.'", "prazo_adicional": "'.$prazoAdicional.'", "preco_adicional": "'.$precoAdicional.'", "volumes": [ // O WHILE PRECISARIA COMEÇAR AQUI { "sku": "A-01", }, // E TERMINAR AQUI ] }'; Compartilhar este post Link para o post Compartilhar em outros sites
EdCesar 124 Denunciar post Postado Janeiro 19, 2017 Não sei como estão vindo os dados da base para um possível refinamento, mas com o que você postou, me parece que não precisa de loop, veja: $volumes = array( array('sku' => 'A-01'), array('sky' => 'A-02')); $json = array('cep_origem' => $cepOrigem, 'cep_destino' => $cepDestino, 'valor_notafical' => $valorNf, 'prazo_adicional' => $prazoAdicional, 'preco_adicional' => $precoAdicional, 'volumes' => $volumes ); echo json_encode($json); Vai ter o mesmo resultado da imagem que você postou Compartilhar este post Link para o post Compartilhar em outros sites
gabrieldarezzo 255 Denunciar post Postado Janeiro 19, 2017 Se você tem um JSON, da decode nele que trabalha de boas pelo PHP. <?php $cepOrigem = '05373020'; $cepDestino = '05373030'; $valorNf = '15.48'; $prazoAdicional = '15'; $precoAdicional = '15'; $skus = array( "sku" => "A-01" ,"sku" => "A-02" ,"sku" => "A-03" ,"sku" => "A-04" ); $json = '{ "cep_origem": "'.$cepOrigem.'", "cep_destino": "'.$cepDestino.'", "valor_notafiscal": "'.$valorNf.'", "prazo_adicional": "'.$prazoAdicional.'", "preco_adicional": "'.$precoAdicional.'", "volumes": [] }'; $json = json_decode($json); $json->volumes = $skus; print json_encode($json); {"cep_origem":"05373020","cep_destino":"05373030","valor_notafiscal":"15.48","prazo_adicional":"15","preco_adicional":"15","volumes":{"sku":"A-04"}} Recomendo esse site: http://jsonviewer.stack.hu/ Compartilhar este post Link para o post Compartilhar em outros sites
mkboy 1 Denunciar post Postado Janeiro 19, 2017 Pessoal, agradecendo pela ajuda. Os dois exemplos rodaram, porém o segundo só retornou o ultimo registro do arry. Ai, ficou assim, esse está retornando resultado da API. $volumes = array( array('sku' => 'A-01', 'quantidade'=> '1','preco'=> '15,20','altura'=> '35','comprimento'=> '10','largura'=> '30','peso'=> '2'), array('sku' => 'A-01', 'quantidade'=> '1','preco'=> '15,20','altura'=> '35','comprimento'=> '10','largura'=> '30','peso'=> '2') ); $json = array('cep_origem' => $cepOrigem, 'cep_destino' => $cepDestino, 'valor_notafiscal' => $valorNf, 'prazo_adicional' => $prazoAdicional, 'preco_adicional' => $precoAdicional, 'volumes' => $volumes ); $jSon = json_encode($json); A minha dúvida, é como faço para montar esse array com um WHILE, exemplo: Eu preciso montar um SKU para cada registro do banco, abaixo coloquei o While para ilustrar o que preciso: $volumes = array( while($rowProd = mysql_fetch_array($qry_prod, MYSQL_ASSOC)) { array('sku' => 'A-01', 'quantidade'=> '1','preco'=> '15,20','altura'=> '35','comprimento'=> '10','largura'=> '30','peso'=> '2'), } ); Como faço isso no PHP? Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
EdCesar 124 Denunciar post Postado Janeiro 19, 2017 O $rowProd corresponde a esse array('sku' => ...) abaixo, se for basta fazer isso: $volumes = array(); while($rowProd = mysql_fetch_array($qry_prod, MYSQL_ASSOC)) { $volumes[] = $rowProd; /** Estou imaginando que o $rowProd contem esse valor: *array('sku' => 'A-01', 'quantidade'=> '1','preco'=> '15,20','altura'=> '35','comprimento'=>'10','largura'=> '30','peso'=> '2') */ } Se não, a ideia é essa, declare $volumes = array(); antes do loop, e alimente ele dentro do loopNão deixe de dar uma olhada depois:http://php.net/manual/pt_BR/book.array.php Compartilhar este post Link para o post Compartilhar em outros sites
gabrieldarezzo 255 Denunciar post Postado Janeiro 19, 2017 Ué percorre todos os seus registros e durante o Loop do While você 'reescreve' esse array (ou retorno do banco como queira). A ideia é reescrever o array antes de dar o json_encode. <?php /* $dados representa o seu banco... seria como eu tivesse feito assim: $dados = mysql_fetch_array($qry_prod, MYSQL_ASSOC) */ $dados = array( array( 'id' => 1 ,'nome' => 'Gabriel' //,'volumes' => array() ) ,array( 'id' => 2 ,'nome' => 'edcesar' //,'volumes' => array() ) ,array( 'id' => 2 ,'nome' => 'mkboy' //,'volumes' => array() ) ); for($i = 0; $i < count($dados); $i++){ //Da forma abaixo mesmo se não existir esse indice no array, acaba sendo criado $dados[$i]['volumes'] = array('sku1', 'sku2', 'sku3'); } /* var_dump($dados); array (size=3) 0 => array (size=3) 'id' => int 1 'nome' => string 'Gabriel' (length=7) 'volumes' => array (size=3) 0 => string 'sku1' (length=4) 1 => string 'sku2' (length=4) 2 => string 'sku3' (length=4) 1 => array (size=3) 'id' => int 2 'nome' => string 'edcesar' (length=7) 'volumes' => array (size=3) 0 => string 'sku1' (length=4) 1 => string 'sku2' (length=4) 2 => string 'sku3' (length=4) 2 => array (size=3) 'id' => int 2 'nome' => string 'mkboy' (length=5) 'volumes' => array (size=3) 0 => string 'sku1' (length=4) 1 => string 'sku2' (length=4) 2 => string 'sku3' (length=4) */ Caso não tenha pegado o conceito Recomendo a leitura: https://secure.php.net/manual/pt_BR/language.types.array.php @dicaExtra foreach($produtos as $prod){ Ele não reescreve array, por isso a necessidade do domínio do for() @dica2: Recentemente tive uma duvida parecida com a sua. o @AndersonMamede compartilhou uma maneira interessante , talvez te ajude: http://forum.imasters.com.br/topic/555304-duvida-a-respeito-de-estrutura/?p=2215127 Compartilhar este post Link para o post Compartilhar em outros sites
mkboy 1 Denunciar post Postado Janeiro 19, 2017 Pessoal, quero agradecer novamente pelo empenho e me desculpar pois por mais explicado que tenha sido, ainda me não entendi bem. Talvez, o que esteja me complicado, é que estou migrado no ASP e isso talvez me confunda mais.. Mas, vou novamente ao caso. Esse exemplo: while($rowProd = mysql_fetch_array($qry_prod, MYSQL_ASSOC)) { $var_sku = $rowProd['b_id_prod']; // ocultei as outras variaveis para ficar mais simples de visualizar $volumes = array( array('sku' => ''.$var_sku.'', 'quantidade'=> ''.$var_qtd.'','preco'=> ''.$varValorProd_00.'','altura'=> ''.$var_altura.'','comprimento'=> ''.$var_comprimento.'','largura'=> ''.$var_altura.'','peso'=> ''.$var_peso.'') ); } Está gerando esse Json. {"cep_origem":"09510101","cep_destino":"09510101","valor_notafiscal":"200,00","prazo_adicional":"0","preco_adicional":"0","volumes":[ {"sku":"55","quantidade":"1","preco":"2820,24","altura":"10","comprimento":"20","largura":"10","peso":"0,5"}]} Portanto neste loop, tem 3 registro no banco de dados, logo, minha expectativa é que ficasse assim: {"cep_origem":"09510101","cep_destino":"09510101","valor_notafiscal":"200,00","prazo_adicional":"0","preco_adicional":"0","volumes":[ {"sku":"55","quantidade":"1","preco":"2820,24","altura":"10","comprimento":"20","largura":"10","peso":"0,5"}, {"sku":"56","quantidade":"2","preco":"30,24","altura":"10","comprimento":"20","largura":"10","peso":"0,5"}, {"sku":"57","quantidade":"1","preco":"50,24","altura":"10","comprimento":"20","largura":"10","peso":"0,5"}]} Então, a cada volta do While, deveria acrescer uma linha respectivo a um registro, no array $volumes. Compartilhar este post Link para o post Compartilhar em outros sites
EdCesar 124 Denunciar post Postado Janeiro 20, 2017 mkboy, apenas acrescente [] na frente de volumes, como no exemplo que coloquei, ficando assim $volumes[] = array(etc...dessa maneira ele fara um push, ao invés de sobrescrever :) Compartilhar este post Link para o post Compartilhar em outros sites
mkboy 1 Denunciar post Postado Janeiro 20, 2017 Obrigado pela ajuda, adiconei os [] e acrescentou os registros... perfeito! :D Mas, surgiu outro detalhe :rolleyes: Veja, esse é o que traz resultado: {"cep_origem":"09510101","cep_destino":"09510101","valor_notafiscal":"200,00","prazo_adicional":"0","preco_adicional":"0","volumes": [{"sku":"32","quantidade":"1","preco":"200,00","altura":"10","comprimento":"20","largura":"10","peso":"0,1"}]} E agora com os colchetes {"cep_origem":"09510101","cep_destino":"09510101","valor_notafiscal":"200,00","prazo_adicional":"0","preco_adicional":"0","volumes": [[{"sku":"32","quantidade":"1","preco":"200,00","altura":"10","comprimento":"20","largura":"10","peso":"0,1"}], [{"sku":"10","quantidade":"1","preco":"48575,00","altura":"10","comprimento":"90","largura":"10","peso":"1,2"}], [{"sku":"1646","quantidade":"1","preco":"1805,00","altura":"10","comprimento":"30","largura":"10","peso":"0,0"}]]} Veja, que no primeiro registro, o SKU 32 ele abre dois colchetes. Comparando com o Json que envia e retorna resultado e o que retorna erro foi essa a diferença que ví... Como remover esse colchete extra? :huh: Obrigado novamente. Compartilhar este post Link para o post Compartilhar em outros sites
EdCesar 124 Denunciar post Postado Janeiro 20, 2017 Tira um array, ficando assim: $volumes[] = array('sku' => ''.$var_sku.'', 'quantidade'=> ''.$var_qtd.'','preco'=> ''.$varValorProd_00.'','altura'=> ''.$var_altura.'','comprimento'=> ''.$var_comprimento.'','largura'=> ''.$var_altura.'','peso'=> ''.$var_peso.''); Compartilhar este post Link para o post Compartilhar em outros sites
mkboy 1 Denunciar post Postado Janeiro 20, 2017 Perfeito! :D Muito obrigado! ;) Compartilhar este post Link para o post Compartilhar em outros sites