Ir para conteúdo

POWERED BY:

Arquivado

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

CrazyLOL

Verificar valores repetidos em array

Recommended Posts

Galera estou querendo verificar em um array se existe valores repetidos.

Bem, montei um algoritmo que na minha visão deveria funcionar... mas não está funcionando...

 

Ele fica mostrando que existe valores repetidos no meu array mesmo não tendo valores iguais. abaixo está meu codigo...

 

$erro = '';

$cod_meses = array('1','2','4','5','1');

			$ver  = '';
			$ver_count = 0;
			
			for($i = 0; $i < sizeof($cod_meses); $i++){
				//verifico se a variavel 'ver' existe dentro do array se existe o ver_count recebe +1
				if(!empty($ver) && (in_array($ver,$cod_meses))){
					$ver_count++;
				}
				//variavel 'ver' recebe o codigo atual para verificar o proximo
				$ver = $cod_meses[$i];
			}

			echo $ver_count;
			
			$erro .= $ver_count > 0 ? 'Existe meses repetidos, para ignorar mude o valor do mês para 0 (zero) <br>' : 'NÃO EXISTE MESES REPETIDOS';
			
			echo $erro;

 

Não sei bem, mas ele está entrando no meu bloco que faz a contagem de valores repetidos. que deveria apenas entrar se existisse realmente o valor no Array.

 

Acredito que seja algo 'bobo' mas não estou dando conta.. :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver o problema... rsss

Estava colocando na variavel 'ver' o valor e após verificar dentro do array o valor que recebi anterior estava dentro do array ( logico ).

a forma correta que fiz é após acrescentar o valor atual do cod_mes para variavel ver é remover esse valor atual dessa posição, assim não teria duplicidade na varredura desse array.

 

Bom não sei se deu pra entender.. :P mas o algoritmo final ficou assim:

 

$cod_meses = array('1','2','4','5','8');

			$ver  = '';
			$ver_count = 0;
			
			$count = count($cod_meses);
			
			for($i = 0; $i < $count; $i++){
				//verifico se a variavel 'ver' existe dentro do array se existe o ver_count recebe +1
				if(!empty($ver)){
					if(in_array($ver,$cod_meses)){
						$ver_count++;
					}
				}
				//variavel 'ver' recebe o codigo atual para verificar o proximo
				$ver = $cod_meses[$i];
				//removo esse valor na posição atual para assim não gerar duplicidade na verificacao
				unset($cod_meses[$i]);
			}

			$ver_count;
			
			$erro .= $ver_count > 0 ? 'Existe meses repetidos, para ignorar mude o valor do mês para 0 (zero) <br>' : 'NÃO EXISTE MESES REPETIDOS';
			
			echo $erro;

Compartilhar este post


Link para o post
Compartilhar em outros sites

há N meios para resolver..

 

 

Veja como fzer isso tudo que vc escreveu numa linha só:

 

Nesse caso, retorna os duplicados se existirem,

$rs = array_unique( array_diff_assoc( $cod_meses, array_unique( $cod_meses ) ) );
var_dump( $rs );

 

 

se o intuito for apenas checar se há algo duplicado, não importando o quê exatamente,

$rs = count($cod_meses) !== count(array_unique($cod_meses));
var_dump( $rs );

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.