Jump to content


Photo

Retirar Valores Repetidos


  • Faça o login para participar
12 replies to this topic

#1 tony

tony

    24 Horas

  • Usuários
  • 486 posts
  • Sexo:Não informado

Posted 01/03/2008, 03:54

Ola pessoal...!
Preciso de uma ajuda...imagine uma situação assim:


$emails = "paulo@bol.com.br,maria@yahoo.com.br,adriana@hotmail.com,adriana@hotmail.com
,paulo@bol.com.br,maria@yahoo.com.br,";



A variavel " email " guarda alguns endereços de email porem existe emails repetidos e eu gostaria de deixar gravado na variavel os emails sem repetições...alguem sabe se tem como eu fazer isso?

Obrigado!

#2 Nicholas Pufal

Nicholas Pufal

    Impossível: só existe até alguém duvidar e provar o contrário.

  • Usuários
  • 1655 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 01/03/2008, 10:18

Os dados vem de onde? Por que os e-mails se repetem?
BLOG Touché Criação - Vamos trocar idéias? -> http://blog.touchecriacao.com.br/
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.

#3 romzinho

romzinho

    Turista

  • Usuários
  • 39 posts
  • Sexo:Não informado

Posted 01/03/2008, 10:57

Eu fiz e deu certo, mas não sei se existe uma forma mais simples para isso.

$emails = "paulo@bol.com.br,maria@yahoo.com.br,adriana@hotmail.com,adriana@hotmail.com,paulo@bol.com.br,maria@yahoo.com.br,";

$exp = explode(",", $emails);
$auq = array_unique($exp);

foreach($auq as $email)
{
	echo $email."<br />";
}

Explicando. Com a função explode eu separo cada email e fica como array. Com a função array_unique eu elimino todos os arrays duplicados. Com a função foreach eu faço o loop.

Espero que tenha entendido.

Vlw.

#4 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 01/03/2008, 12:41

fala romzinho... aproveitando...

Ali no caso então para colocar a vírgula novamente é só substituir o "<br />" por ","...

Mas tipo ... como você faria para contar o número de elementos no array após o array_unique() para que possa colocar "," somente até após o penúltimo elemento ?

Contar é beleza... mas aí vc faria um -1 para definir a última posição da "," e como faria isso ?
:ponder:Até mais

#5 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 01/03/2008, 14:12

Ali no caso então para colocar a vírgula novamente é só substituir o "<br />" por ","...

Tanto naquele quanto neste caso, viva o implode(). :D

Mas tipo ... como você faria para contar o número de elementos no array após o array_unique() para que possa colocar "," somente até após o penúltimo elemento ?

Tu teria de contar (count()) o retorno de array_unique(), no caso, a variável $auq.

[]’s :DAté mais

#6 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 01/03/2008, 19:37

Sim Paulo... contar é fácil... mas o lance de colocar a vírgula somente até o penúltimo elemento :D

Sei que tem mas sou panga hehehe o implode() resolve ?

Vou testar mais depois... é que aora vou no boteco ... sabe como é sábado neh ... pizza etc... :D

Abraço Até mais

#7 Nicholas Pufal

Nicholas Pufal

    Impossível: só existe até alguém duvidar e provar o contrário.

  • Usuários
  • 1655 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 01/03/2008, 20:06

Não daria para pegar fazendo um IF de (1 + valor do índice) com o módulo do (total da array - 1) e verificando se é 0?
BLOG Touché Criação - Vamos trocar idéias? -> http://blog.touchecriacao.com.br/
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.

#8 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 01/03/2008, 20:52

Não daria para pegar fazendo um IF de (1 + valor do índice) com o módulo do (total da array - 1) e verificando se é 0?

Sendo possível ou não, seria uma engenharia pra lá de grosseira (o que comumente define-se por POG). Se você tem um recurso built-in feito e otimizado para tal, não há motivos para reinventar a roda. Se reinventar, estando evidente a superfluidade, será uma prática de má programação. :(

Simple is better than complex. :assobio:

Sim, Crab, o implode() resolve. ;)

Um exemplo all-in-one:

print implode(',', array_unique(array_filter(explode(',', $emails))));
PS: O array_diff() array_filter() neste caso serve para tirar possíveis elementos vazios desencadeados por uma possível vírgula sobrando, tal como acontece no exemplo do colega lá encima. :P

[]’s :DAté mais

#9 Nicholas Pufal

Nicholas Pufal

    Impossível: só existe até alguém duvidar e provar o contrário.

  • Usuários
  • 1655 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 01/03/2008, 21:18

Simple is better than complex.

Mas para mim aquilo é o simples :P Eis o problema... Até que eu pegue bem as funções do PHP, ter mais amplo o horizonte de funções (tô muito acostumado com ASP ainda), fico complicando de tempos em tempos no PHP.

Aproveitando já que tô aqui mesmo, não foi meio exagerado o "engenharia pra lá de grosseira"? Porque quando eu comentei, eu tinha em mente isto:

Dentro do foreach, colocar um IF assim:

If (($indice + 1) % (count($array) - 1) == 0) { //insere virgula e etc.. }

Não acho que iria exigir extravagâncias na hora do processamento. Ou iria? :huh:

Edit: esquece, li tudo agora, com carinho (:P) e percebi porque você falou aquilo. Eu postei daquele meu jeito, para responder o que o crab perguntou no post anterior ao meu, sobre "como capturar a penúltima linha". Aí apenas olhei a função do colega, e pensei em cima daquilo. Para aquele caso (pegar penúltima linha) não considero POG. Se bem que pensando melhor daria para reverter a array e pegar o penultimo elemento de outras formas... enfim, já falei demais, esquece :P

Edição feita por: Firehalk, 01/03/2008, 22:54.

BLOG Touché Criação - Vamos trocar idéias? -> http://blog.touchecriacao.com.br/
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.

#10 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 01/03/2008, 22:04

Sim, Crab, o implode() resolve. ;)

Um exemplo all-in-one:

print implode(',', array_unique(array_filter(explode(',', $emails))));

PS: O array_diff() array_filter() neste caso serve para tirar possíveis elementos vazios desencadeados por uma possível vírgula sobrando, tal como acontece no exemplo do colega lá encima. :P

[]’s :D



puts sabia que não tinha pensado no inverso com mais carinho... eu até tinha dado uma olhada, mas estava com a cabeça no boteco :assobio:

Agora aquele all-in-one foi perfeito... não precisou foreach(), for(), while() nem ifs... nem etc...

perfeito

Andei passando por algumas funções de array no manual mas array_diff() passei batido :D

Valeu grande

(y)


------------------

ih vc editou...

porque array_filter() é melhor... o array_diff() funcionou perfeitamente :huh:Até mais

#11 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 01/03/2008, 23:10

ih vc editou...

porque array_filter() é melhor... o array_diff() funcionou perfeitamente :huh:

Porque array_filter() foi feita pra isso! :P

É que a função array_filter(), quando não acompanhada de função de callback no segundo argumento, filtra os valores iguais a FALSE, o que inclui false, null, '' (vazio) e 0. :)

Não que a função array_diff() comparando com um outro array de item vazio não sirva, a questão é que array_filter() tem mais razão de uso. ;)

[]’s :DAté mais

#12 tony

tony

    24 Horas

  • Usuários
  • 486 posts
  • Sexo:Não informado

Posted 02/03/2008, 16:57

Muito obrigado pela ajuda...!
Agora como eu faço para gravar todos esses emails em uma unica variavel?

Ex: $emails = "paulo@bol.com.br,maria@yahoo.com.br,adriana@hotmail.com";


Mais uma vez agradeço a ajuda e a paciencia!!!!
Abs

#13 Nicholas Pufal

Nicholas Pufal

    Impossível: só existe até alguém duvidar e provar o contrário.

  • Usuários
  • 1655 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre

Posted 02/03/2008, 17:31

$variavel = implode(',', array_unique(array_filter(explode(',', $emails))));

:unsure:
BLOG Touché Criação - Vamos trocar idéias? -> http://blog.touchecriacao.com.br/
// Links úteis: Busca || Regras
// Não respondo dúvidas via mensagem privada. Use o fórum para buscar ou perguntar.




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq