Carlos Rocha Posted February 6, 2014 at 02:28 PM Report #544204 Posted February 6, 2014 at 02:28 PM (edited) Eu tenho uma dificuldade enorme com formação de arrays grandes.e gostaria de contar, mais uma vez, com os amigos daqui do fórum: Tenho o seguinte array que é o resultado de um print_r($_POST): Array ( [precoold] => Array ( [152] => Array ( [4] => Array ( [0] => 33,66 ) ) [154] => Array ( [4] => Array ( [0] => 22,07 ) ) ) [preco] => Array ( [152] => Array ( [4] => Array ( [0] => 30,00 ) ) [154] => Array ( [4] => Array ( [0] => 20,00 ) ) ) ) Preciso de um código que faça esse array ter a seguinte estrutura: primeiro os números 152 e 154=> eles são id's de empresas após, vem os números 4 => que é o código do tipo do serviço após vem os nomes preco e precoold e depois cada um deles. No caso os índices 0, 1....... que neste caso só tem o índice 0 mesmo. Desde já obrigado a quem puder ajudar! Carlos Rocha Edited February 6, 2014 at 02:34 PM by carcleo
HappyHippyHippo Posted February 6, 2014 at 02:32 PM Report #544207 Posted February 6, 2014 at 02:32 PM apresenta um exemplo do array de saída que pretendes porque a tua descrição não exemplifica uma estrutura concreta (ou queres recomeçar a conversa da exposição de dúvidas ?) IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Carlos Rocha Posted February 6, 2014 at 02:38 PM Author Report #544210 Posted February 6, 2014 at 02:38 PM (edited) Acho que consegui: Confere fazendo favor? $result = array(); foreach ($_POST as $param => $values) { foreach ($values as $item => $value) { foreach ($value as $_POST => $value2) { $result[$item][$_POST][$param] = $value2; } } } A saída que quero é assim: Array ( [152] => Array ( [4] => Array ( [precoold] => Array ( [0] => 33,66 ) [preco] => Array ( [0] => 30,00 ) ) ) [154] => Array ( [4] => Array ( [precoold] => Array ( [0] => 22,07 ) [preco] => Array ( [0] => 20,00 ) ) ) ) A dúvida é: Se existirem mais serviço no formulário, por exemplo, o serviço 3, , o índice 4..... será incrementado? 4{} 3{} Exemplo: [154] => Array ( [4] => Array ( [precoold] => Array ( [0] => 22,07 ) [preco] => Array ( [0] => 20,00 ) ) [3] => Array ( [precoold] => Array ( [0] => 15,30 ) [preco] => Array ( [0] => 22,00 ) ) Edited February 6, 2014 at 02:41 PM by carcleo
HappyHippyHippo Posted February 6, 2014 at 02:46 PM Report #544213 Posted February 6, 2014 at 02:46 PM foreach ($_POST as $kparam => $vparam) { foreach ($vparam as $kidempresa => $vidempresa) { foreach ($vidempresa as $kidservico => $vidservico) { $result[$kidempresa][$kidservico][$kparam] = $vidservico; } } } neste código não existem incrementos, é simplesmente a conversão do array. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Carlos Rocha Posted February 6, 2014 at 02:55 PM Author Report #544215 Posted February 6, 2014 at 02:55 PM Me diz as diferenças e aonde eu estou pecando? Isso é para que eu possa entender aonde estou errando em eu raciocínio!
HappyHippyHippo Posted February 6, 2014 at 03:06 PM Report #544218 Posted February 6, 2014 at 03:06 PM foreach ($_POST as $param => $values) { foreach ($values as $item => $value) { foreach ($value as $_POST => $value2) { // A // | // estás a destruir os dados do pedido original $result[$item][$_POST][$param] = $value2; } } } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Carlos Rocha Posted February 6, 2014 at 03:40 PM Author Report #544226 Posted February 6, 2014 at 03:40 PM Então, a requisiçao original ($_POST) passará a valer $value2? É isso?
HappyHippyHippo Posted February 6, 2014 at 03:46 PM Report #544230 Posted February 6, 2014 at 03:46 PM Então, a requisiçao original ($_POST) passará a valer $value2? É isso? não no teu código, o valor da chave do elemento iterado do array $value irá ser atribuído à variável $_POST, isto iterativamente em todo o ciclo foreach. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Carlos Rocha Posted February 6, 2014 at 04:44 PM Author Report #544238 Posted February 6, 2014 at 04:44 PM Entendi! Obrigado!
Carlos Rocha Posted February 6, 2014 at 07:33 PM Author Report #544272 Posted February 6, 2014 at 07:33 PM (edited) Veja aonde eu fui entrar: Preciso fazer uma modificação na função. Precisei incluir mais dois campos: ObservaEmpresa e envia A modificação é a seguinte: Se o campo envia estiver com resultado 's', esse array deve ir. Caso contrario, não vai. E o problema maior é que esse o outro campo não esta na mesma estrutura,. Eis o print_r($_POST) Novamente; Array ( [obsEmpresa] => ei [envia] => Array ( [152] => Array ( [4] => Array ( [0] => s ) ) [154] => Array ( [4] => Array ( [0] => s ) ) ) [precoold] => Array ( [152] => Array ( [4] => Array ( [0] => 20,00 ) ) [154] => Array ( [4] => Array ( [0] => 22,07 ) ) ) [tipo] => Array ( [152] => Array ( [4] => Array ( [0] => Tipo 1 Hospedagem ) ) [154] => Array ( [4] => Array ( [0] => Tipo 2 ) ) ) [preco] => Array ( [152] => Array ( [4] => Array ( [0] => 20,00 ) ) [154] => Array ( [4] => Array ( [0] => 22,07 ) ) ) ) Podem me ajudar em mais essa? Edited February 6, 2014 at 07:56 PM by carcleo
Carlos Rocha Posted February 6, 2014 at 08:06 PM Author Report #544278 Posted February 6, 2014 at 08:06 PM Consegui fazer dar essa saida: Array ( [152] => Array ( [4] => Array ( [envia] => Array ( [0] => s ) [precoold] => Array ( [0] => 20,00 ) [tipo] => Array ( [0] => Tipo 1 Hospedagem ) [preco] => Array ( [0] => 20,00 ) ) ) [154] => Array ( [4] => Array ( [envia] => Array ( [0] => s ) [precoold] => Array ( [0] => 22,07 ) [tipo] => Array ( [0] => Tipo 2 ) [preco] => Array ( [0] => 22,07 ) ) ) [0] => Array ( [0] => Array ( [obsEmpresa] => oi ) ) ) Eu pensei em dividir o array em dois 1 array só com o ultimo campo: o campo obsEmpresa, 1 array com os demais campos. Seria uma boa? Alguma ajuda?
HappyHippyHippo Posted February 6, 2014 at 08:22 PM Report #544280 Posted February 6, 2014 at 08:22 PM // guardar o valor do campo extra $observa_empresa = $_POST['obsEmpresa']; // eliminar o campo extra unset($_POST['obsEmpresa']); // ... o processo normal ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Carlos Rocha Posted February 6, 2014 at 08:33 PM Author Report #544282 Posted February 6, 2014 at 08:33 PM (edited) Ok. Fiz assim: $result = array(); $demaisCampos = array(); $obsEmpresa = array(); $obsEmpresa = $_POST["obsEmpresa"]; unset($_POST["obsEmpresa"]); foreach ($_POST as $kparam => $vparam) { foreach ($vparam as $kidempresa => $vidempresa) { foreach ($vidempresa as $kidservico => $vidservico) { $result[$kidempresa][$kidservico][$kparam] = $vidservico; } } } print "<pre>"; print_r($obsEmpresa); print "</pre>"; Agora só falta eliminar do array $resut [152] => Array ( [4] => Array ( [envia] => Array ( [0] => s ) [precoold] => Array ( [0] => 20,00 ) [tipo] => Array ( [0] => Tipo 1 Hospedagem ) [preco] => Array ( [0] => 20,00 ) ) ... Todas os arrays do tipo [152][4] que o campo envia esta setado como 'n' Edited February 6, 2014 at 09:30 PM by carcleo
HappyHippyHippo Posted February 6, 2014 at 09:18 PM Report #544288 Posted February 6, 2014 at 09:18 PM Agora só falta eliminar do array $resut hum ? porquê ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Carlos Rocha Posted February 6, 2014 at 09:20 PM Author Report #544292 Posted February 6, 2014 at 09:20 PM Preciso criar um novo array que será este array porem excluindo todas as combinações aonde o item envi é igual a 'n'. Exemplo: O array [4] do array [152], possui [envia] com valor 'n', logo, o array [4] do array [152] deve ser deletado. Mas se houver outro array do [152], por exemplo [3] e seu [envia] estiver com 's', este fica. Como posso fazer isso? Array ( [152] => Array ( [4] => Array ( [envia] => Array ( [0] => n ) [precoold] => Array ( [0] => 20,00 ) [tipo] => Array ( [0] => Tipo 1 Hospedagem ) [preco] => Array ( [0] => 20,00 ) ) ) [154] => Array ( [4] => Array ( [envia] => Array ( [0] => s ) [precoold] => Array ( [0] => 22,07 ) [tipo] => Array ( [0] => Tipo 2 ) [preco] => Array ( [0] => 22,07 ) ) ) ) Carlos Rocha
HappyHippyHippo Posted February 6, 2014 at 09:37 PM Report #544294 Posted February 6, 2014 at 09:37 PM foreach ($result as $id1 => $i1) foreach ($i1 as $id2 => $item) if ($item['envia'][0] == 'n') unset($result[$id1)[$id2]); IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Devexz Posted February 6, 2014 at 09:47 PM Report #544297 Posted February 6, 2014 at 09:47 PM (edited) foreach ($result as $id1 => $i1) foreach ($i1 as $id2 => $item) if ($item['envia'][0] == 'n') unset($result[$id1)[$id2]); DAM! a experiência fala mais alto 😛 , eu estive a fazer testes para ver se estava tudo bem, mas inicialmente pensei em trabalhar com & (endereços de memória) para fazer unset directamente, mas no fim cheguei à mesma conclusão tu. Bem deixo o meu esforço que é mesma coisa 😕 foreach($array as $key => $value) { foreach($value as $k => $j) { //apontar para o primeiro indice if(reset($j["envia"]) == "n") { //fazer unset unset($array[$key][$k]); } } } Edited February 6, 2014 at 09:47 PM by Devexz Contador de calorias: caloriaspordia.com
Carlos Rocha Posted February 6, 2014 at 10:06 PM Author Report #544301 Posted February 6, 2014 at 10:06 PM é, esse esta dificil mesmo. O jeito é filtra no if mesmo.
Carlos Rocha Posted February 6, 2014 at 10:18 PM Author Report #544302 Posted February 6, 2014 at 10:18 PM Olha só que coisa loca: Nem foi preciso fazer esse filtro: Obrigado a vocês que tiveram paciência comigo e me ajudaram. <?php if(isset($_GET["acao"]) and $_GET["acao"]=="enviarCli") { if(isset($_GET["atualizaRetornos"]) and $_GET["atualizaRetornos"]=="s") { $result = array(); $demaisCampos = array(); $obsEmpresa = $_POST["obsEmpresa"][0][0]; unset($_POST["obsEmpresa"]); foreach ($_POST as $kparam => $vparam) { foreach ($vparam as $kidempresa => $vidempresa) { foreach ($vidempresa as $kidservico => $vidservico) { $result[$kidempresa][$kidservico][$kparam] = $vidservico; } } } foreach ($result as $param => $value1) { foreach ($value1 as $servico2 => $value2) { for ($i=0;$i<count($value2["precoold"]);$i++) { if($value2["envia"][$i]=="s") { if($value2["precoold"][$i]!=$value2["preco"][$i]) { $value2["precoold"][$i] = str_replace(",", ".", $value2["precoold"][$i]); $buscaEmpresaServicoString= "SELECT id FROM empresasservicosretorno WHERE empresa=".$param." AND servico=".$servico2." AND cotacao = ".$_GET["cotacao"]; $buscaEmpresaServicoQuery = $conexao->Query($buscaEmpresaServicoString); if($buscaEmpresaServicoQuery->num_rows>0) { list($idempresasservicos)=$buscaEmpresaServicoQuery->fetch_row(); $buscaEmpresaServicoTipoString= "SELECT id FROM empresasservicostiposretorno WHERE empresasservicosretorno=".$idempresasservicos." AND tipo = '".$value2["tipo"][$i]."'"; $buscaEmpresaServicoTipoQuery = $conexao->Query($buscaEmpresaServicoTipoString); if($buscaEmpresaServicoTipoQuery->num_rows>0) { list($idempresasservicostipos)=$buscaEmpresaServicoTipoQuery->fetch_row(); $value2["preco"][$i] = str_replace(",", ".",$value2["preco"][$i]); $alteraValorServico= " UPDATE empresasservicostiposretorno SET preco='".$value2["preco"][$i]."' WHERE id=".$idempresasservicostipos; $alteraValorServicoQuery=$conexao->Query($alteraValorServico); } } } } } } } $atendeCotacaoString=" UPDATE cotacoes SET atendido = 's', atendidoData='".date('Y-m-d')."' WHERE id=".$_GET["cotacao"]; $atendeCotacaoQuery=$conexao->Query($atendeCotacaoString); } $textoEmail=""; $sql_string = " select cotacoes.id, servicos.nome, cotacoes.nome, cotacoes.email, cotacoes.telefone, date_format(cotacoes.dataEntrada, '%d-%m-%Y'), date_format(cotacoes.dataSaida, '%d-%m-%Y') from cotacoes, servicos where cotacoes.servico = servicos.id and cotacoes.id=".$_GET["cotacao"]; $sql = $conexao->query($sql_string); if ($sql->num_rows == 0) {$textoEmail.= "Pedido Inexistente";} else { list( $id, $servico, $nome, $email, $telefone, $dataEntrada, $dataSaida, ) = $sql->fetch_row(); $icone_responde="<img src=\"../img/responder.jpog\ width=\"130px\" title=\"Responder\" alt=\"Responder\" />"; $link_responde="<a href='?".www."/acao=responder&cotacao=".$_GET["cotacao"]."'>".$icone_responde."</a>"; $textoEmail.=" <table width=\"800px\" border=\"1\" cellspacing=\"1\" cellpadding=\"1\"> <thead style=\"text-align:left\" > <tr> <th align='center'><img src='". www."/img/logo_msp.png'/></th> </tr> <tr><th style=\"height:70px\"> <label> Prezado(a) sr(a) ".$nome.". Conforme prometido segue neste e-mail o resultado da cotação que você fez em nosso site.<br />Por favor, confira os dados abaixo:<br /> </label> </th></tr> <tr><th> <label style=\"width:200px\">Cliente: </label>".$nome."<br /> <label style=\"width:100px\">Serviço: </label>".$servico."<br /> <label style=\"width:200px\">Entrada: </label>".$dataEntrada."<br /> <label style=\"width:200px\">Saida: </label>".$dataSaida."<br /> <label style=\"width:100px\">E-mail: </label>".$email."<br /> <label style=\"width:100px\">Telefone: </label>".formata_tel($telefone)."<br /> </th></tr> </thead> </table> <br /><br /> <table width=\"800px\" align=\"center\" border=\"0\" > <tr><th align=\"center\" ><h2>Retornos ao cliente</h2></th></tr> "; include("formMailCli.php"); $textoEmail.= " <tr> <td align='center'><br />Por favor, clique no botão abaixo para nos dar um retorno<br /> <a href='". www."/cliente/index.php?acao=form&cotacao=".$_GET["cotacao"]."'><img src='". www."/img/responder.jpg' width='100px' /></a></td> </tr> <tr> <td align='center'> Obrigado! <br /> ". titulo_empresa."<br />".www."<br />".tel_site."<br />".endereco_site ."</td> </tr> "; $textoEmail.="</table>"; print $textoEmail; }//FIM DO PEDIDO INEXISTENTE. //print $texto; /////ENVIA E-MAIL AO CLIENTE INICIO///// $emailsender = "nao-responda@".end_site; $titulo_email= "Resposta de empresa à Cotação n°: ".$_GET["cotacao"]; $headers = "MIME-Version: 1.1\n"; $headers.= "Content-type: text/html; charset=utf-8" . "\r\n"; $headers.= "From:".titulo_cabecalho."<".$emailsender.">\r\n"; $corpo = "FORMULÁRIO CONTATO - ".titulo_cabecalho." \n"; $corpo .= $textoEmail; //envio o correio... @mail ($email, $titulo_email, $corpo, $headers); /////ENVIA E-MAIL AO CLIENTE FIM///// echo "<h3>Mensagem enviada ao cliente</h3>"; } ?>
Devexz Posted February 6, 2014 at 11:20 PM Report #544304 Posted February 6, 2014 at 11:20 PM Olha só que coisa loca: Nem foi preciso fazer esse filtro: Obrigado a vocês que tiveram paciência comigo e me ajudaram. <?php if(isset($_GET["acao"]) and $_GET["acao"]=="enviarCli") { if(isset($_GET["atualizaRetornos"]) and $_GET["atualizaRetornos"]=="s") { $result = array(); $demaisCampos = array(); $obsEmpresa = $_POST["obsEmpresa"][0][0]; unset($_POST["obsEmpresa"]); foreach ($_POST as $kparam => $vparam) { foreach ($vparam as $kidempresa => $vidempresa) { foreach ($vidempresa as $kidservico => $vidservico) { $result[$kidempresa][$kidservico][$kparam] = $vidservico; } } } foreach ($result as $param => $value1) { foreach ($value1 as $servico2 => $value2) { for ($i=0;$i<count($value2["precoold"]);$i++) { if($value2["envia"][$i]=="s") { if($value2["precoold"][$i]!=$value2["preco"][$i]) { $value2["precoold"][$i] = str_replace(",", ".", $value2["precoold"][$i]); $buscaEmpresaServicoString= "SELECT id FROM empresasservicosretorno WHERE empresa=".$param." AND servico=".$servico2." AND cotacao = ".$_GET["cotacao"]; $buscaEmpresaServicoQuery = $conexao->Query($buscaEmpresaServicoString); if($buscaEmpresaServicoQuery->num_rows>0) { list($idempresasservicos)=$buscaEmpresaServicoQuery->fetch_row(); $buscaEmpresaServicoTipoString= "SELECT id FROM empresasservicostiposretorno WHERE empresasservicosretorno=".$idempresasservicos." AND tipo = '".$value2["tipo"][$i]."'"; $buscaEmpresaServicoTipoQuery = $conexao->Query($buscaEmpresaServicoTipoString); if($buscaEmpresaServicoTipoQuery->num_rows>0) { list($idempresasservicostipos)=$buscaEmpresaServicoTipoQuery->fetch_row(); $value2["preco"][$i] = str_replace(",", ".",$value2["preco"][$i]); $alteraValorServico= " UPDATE empresasservicostiposretorno SET preco='".$value2["preco"][$i]."' WHERE id=".$idempresasservicostipos; $alteraValorServicoQuery=$conexao->Query($alteraValorServico); } } } } } } } $atendeCotacaoString=" UPDATE cotacoes SET atendido = 's', atendidoData='".date('Y-m-d')."' WHERE id=".$_GET["cotacao"]; $atendeCotacaoQuery=$conexao->Query($atendeCotacaoString); } $textoEmail=""; $sql_string = " select cotacoes.id, servicos.nome, cotacoes.nome, cotacoes.email, cotacoes.telefone, date_format(cotacoes.dataEntrada, '%d-%m-%Y'), date_format(cotacoes.dataSaida, '%d-%m-%Y') from cotacoes, servicos where cotacoes.servico = servicos.id and cotacoes.id=".$_GET["cotacao"]; $sql = $conexao->query($sql_string); if ($sql->num_rows == 0) {$textoEmail.= "Pedido Inexistente";} else { list( $id, $servico, $nome, $email, $telefone, $dataEntrada, $dataSaida, ) = $sql->fetch_row(); $icone_responde="<img src=\"../img/responder.jpog\ width=\"130px\" title=\"Responder\" alt=\"Responder\" />"; $link_responde="<a href='?".www."/acao=responder&cotacao=".$_GET["cotacao"]."'>".$icone_responde."</a>"; $textoEmail.=" <table width=\"800px\" border=\"1\" cellspacing=\"1\" cellpadding=\"1\"> <thead style=\"text-align:left\" > <tr> <th align='center'><img src='". www."/img/logo_msp.png'/></th> </tr> <tr><th style=\"height:70px\"> <label> Prezado(a) sr(a) ".$nome.". Conforme prometido segue neste e-mail o resultado da cotação que você fez em nosso site.<br />Por favor, confira os dados abaixo:<br /> </label> </th></tr> <tr><th> <label style=\"width:200px\">Cliente: </label>".$nome."<br /> <label style=\"width:100px\">Serviço: </label>".$servico."<br /> <label style=\"width:200px\">Entrada: </label>".$dataEntrada."<br /> <label style=\"width:200px\">Saida: </label>".$dataSaida."<br /> <label style=\"width:100px\">E-mail: </label>".$email."<br /> <label style=\"width:100px\">Telefone: </label>".formata_tel($telefone)."<br /> </th></tr> </thead> </table> <br /><br /> <table width=\"800px\" align=\"center\" border=\"0\" > <tr><th align=\"center\" ><h2>Retornos ao cliente</h2></th></tr> "; include("formMailCli.php"); $textoEmail.= " <tr> <td align='center'><br />Por favor, clique no botão abaixo para nos dar um retorno<br /> <a href='". www."/cliente/index.php?acao=form&cotacao=".$_GET["cotacao"]."'><img src='". www."/img/responder.jpg' width='100px' /></a></td> </tr> <tr> <td align='center'> Obrigado! <br /> ". titulo_empresa."<br />".www."<br />".tel_site."<br />".endereco_site ."</td> </tr> "; $textoEmail.="</table>"; print $textoEmail; }//FIM DO PEDIDO INEXISTENTE. //print $texto; /////ENVIA E-MAIL AO CLIENTE INICIO///// $emailsender = "nao-responda@".end_site; $titulo_email= "Resposta de empresa à Cotação n°: ".$_GET["cotacao"]; $headers = "MIME-Version: 1.1\n"; $headers.= "Content-type: text/html; charset=utf-8" . "\r\n"; $headers.= "From:".titulo_cabecalho."<".$emailsender.">\r\n"; $corpo = "FORMULÁRIO CONTATO - ".titulo_cabecalho." \n"; $corpo .= $textoEmail; //envio o correio... @mail ($email, $titulo_email, $corpo, $headers); /////ENVIA E-MAIL AO CLIENTE FIM///// echo "<h3>Mensagem enviada ao cliente</h3>"; } ?> está memo louco, xiiii tanto código! 😄 Tens de começar a comentar o teu código, senão daqui a alguns dias vais-te afogar nele! Contador de calorias: caloriaspordia.com
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now