Ir para conteúdo

POWERED BY:

Arquivado

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

pest_g

Problema de Lógica

Recommended Posts

Amigos tenho o seguinte problema.

 

Tenho uma página que tem uns 30 checkbox com varias cores para serem escolhidas pelo usuário.

Tem algumas cores que são exibidas por padrão caso o usuário não selecione nenhuma.

 

Ex. $corpadrao = array("verde","amarelo","Azul","branco");

E tem as cores que são pegas dos checkbox já como array.

 

$corselect = $_POST["cores"];

 

O problema é que gostaria que as cores quando constassem tanto em $corselect quanto em $corpadrao,

Não pararecessem duplicadas.

Acredito que tal tratamento tenha que ser feito na mão, pois ao tentar usar as combinações de arrays padrão do php tais como array_marge e arrey_unique, mas esta dando anomalias nos resultados dependendo a composição das matrizes.

 

Caso algum colega já tenha passado por algo parecido e queira compartilhar a experiência ficaria muito grato.

 

Atenciosamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloca uma verificação....se $corpadrao for diferente de $corselect ele faz a ação que você quer senão ele não faz!!

Obrigado Leandro.Mas o caso é um pouco mais complicado já que estou trabalhando com array e não com uma variável unica.Poderia até tratar manualmente cada uma das possibilidades mais esta sertamente não é a forma mais adequada de tratar o problema.De qualquer forma mais uma vez obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade a lógica do leandro07 está correta.

 

Olha um exemplo, só adaptar ao seu código.

 

<?php$cor1 = array("verde","preto","amarelo","laranja"); /* $cor1, troque pelo array dos seus checkbox, assim  $cor1 = $_POST["cores"]; */$cor2 = array("verde","azul","preto","rosa");/* $cor2, seu array padrão, $corpadrao = array("verde","amarelo","Azul","branco"); */foreach ($cor1 as $chave => $valor) {	/* O foreach já cria as chaves e os valores automaticamente */	if(in_array($valor, $cor2)) {	/* Testa se já existe no arry */			echo "Esse está repetido : ".$valor."<br>\n";				/* Se existir .... */			} else {						echo "Esse não está repetido : ".$valor."<br>\n";				 /* Caso não esteja repetido .... */			}		}?>

Testa primeiro do jeito que está pra entender como funciona, depois vá adaptando conforme está comentado.

 

Qualquer dúvida poste. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é , mas nao tem problema se você esta trabalhando com array.Como ta dentro de um loop , ele vai verifica todas as possibilidades. Não é necessário escrever todas elas.Qualquer dúvida é só postar..Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

[quote name='Epyllion' date='Jan 24 2006, 11:30 AM' post='503622']Na verdade a lógica do leandro07 está correta.Olha um exemplo, só adaptar ao seu código.[code]<?php$cor1 = array("verde","preto","amarelo","laranja"); /* $cor1, troque pelo array dos seus checkbox, assim  $cor1 = $_POST["cores"]; */$cor2 = array("verde","azul","preto","rosa");/* $cor2, seu array padrão, $corpadrao = array("verde","amarelo","Azul","branco"); */foreach ($cor1 as $chave => $valor) {	/* O foreach já cria as chaves e os valores automaticamente */	if(in_array($valor, $cor2)) {	/* Testa se já existe no arry */			echo "Esse está repetido : ".$valor."<br>\n";				/* Se existir .... */			} else {						echo "Esse não está repetido : ".$valor."<br>\n";				 /* Caso não esteja repetido .... */			}		}?>
Testa primeiro do jeito que está pra entender como funciona, depois vá adaptando conforme está comentado.Qualquer dúvida poste. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
Obrigado pela ajuda mas fui ralando e cheguei a seguinte resolução do problema:
$vardominio	=$_POST["dominio"];	  /*Pega o nome do domínio da página index.php.*/[/color]$varextensao   =$_POST["extensao"];	   /* Pega as extenções selecionadas da página [/color] index.php.*/ $varextpadroes = array(".com",".com.br",".net",".org",".tv",".info"); /*array com extenções padrão a serem exibidas caso o cliente escolha outros nomes de domínio.*/[/color]$varextpadroes2 = array(".com",".net",".org",".tv",".info");$vartotal	  = array_merge($varextensao,$varextpadroes);	   /*array especifico do php que une N Matrizes.*/[/color]$result		= array_unique($vartotal);	   /*arrey especifico do php que eleimina duplicidades nos arrays.*/echo "oque esta vindo de vardominio".$vardominio."<br>";/*Verifica se alguma das estenções que excluem .com.br foi identificada. */for ($j = 0; $j<count($varextensao);$j++){ 	if ($varextensao[$j] == ".org.br" || $varextensao[$j] == ".ind.br" || $varextensao[$j] == ".srv.br"){	 $vartotal	  = array_merge($varextensao,$varextpadroes2);	 $result		= array_unique($vartotal);	}      	if ($varextensao[$j] == ".nom.br"){		 $result = array(".nom.br");	} } /*Laço para excluir indices nulos na Matriz. */   for($i = 0; $i<count($result); $i++){   if ($i-$j = 5){	  array_splice($result,6,1);   }	 }   ?>
Peço para galera mais experiênte verificar se esta é a forma mais elegante de resolver o problema ou se existe uma outra.Pois estou com dois problemas:1) Conseguir entregar o projeto no prazo.2) Será analizado minha lógica e a legibilidade dos meus scripts.Se puderm dar uma nota para o script de 5 a 10 digo de 5 acima pois o mesmo funciona então é no mínimo 5 acredito que não esteja 10 mas derrepente quem sabe. :D Sem mais e muito obrigado amigos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma coisa que ajudaria seria você usar o extract();

 

ajuda a limpar seu código....

 

no começo você da um extract em $_POST

 

ex:

 

extract($_POST);não teria mais $vardominio = $_POST['dominio']o valor do dominio vindo de post seria $dominioo de extensão seria $extensao e por ai vai.

Se tiver duvida , posta ai...

 

Ah, não vo vota pq não sou experiente o suficiente pra julgar o código de alguém....mas de qualquer forma eu achei bom

Bem simples de entender!!

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma coisa que ajudaria seria você usar o extract();ajuda a limpar seu código....no começo você da um extract em $_POSTex:

extract($_POST);não teria mais $vardominio = $_POST['dominio']o valor do dominio vindo de post seria $dominioo de extensão seria $extensao e por ai vai.
Se tiver duvida , posta ai...Ah, não vo vota pq não sou experiente o suficiente pra julgar o código de alguém....mas de qualquer forma eu achei bomBem simples de entender!!Abraços.
Obrigado vou implementar.Aproveitando a oportunidade estou enfrentando um outro problema.Gostaria de passar o valor de um Array por meio de um hidden.Você sabe me informar qual é a sintaxe para tanto ? Até mais e mais uma vez Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi qual é o seu propósito....Se você montar um array e depois usá-lo em outra página seria interessante você joga os valores numa $_SESSION.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi qual é o seu propósito....Se você montar um array e depois usá-lo em outra página seria interessante você joga os valores numa $_SESSION.

Cara eu até concórdo com você.Mas tem um ditado que diz manda quem pode obedece quem tem juizo.Trabalando com array eu economizo muito em linhas de comando e se for possivel passar isso por hidden que foi o solicitado vou ganhar um bom tempo.Caso não seja possivel vou ter que pensar em um outro jeito.Mas de qualquer forma muito obrigado pela indicação.

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.