Jump to content

Recommended Posts

Posted (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 by carcleo
Posted (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 by carcleo
Posted
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
Posted (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 by carcleo
Posted

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?

Posted (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 by carcleo
Posted

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

Posted (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 by Devexz

Contador de calorias: caloriaspordia.com

Posted

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>"; 
}

?>
Posted

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.