Como remover valores duplicados de um Array no PHP


Se você possui um array que tem valores duplicados e quer removê-los, continue lendo este artigo. Neste artigo vou te mostrar exatamente como fazer para remover valores duplicados de um array no PHP.

O PHP Possui uma função chamada array_unique que serve exatamente para este propósito. Veja abaixo um exemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
$array = array("10",10,"dinheiro", "sucesso", "Sucesso", "alto","alto");
 
$array = array_unique($array,SORT_REGULAR);
 
print_r_pre($array);
 
function print_r_pre($arr){
    
    echo "<pre>";
    print_r($arr);
    echo "</pre>";
    
}
$array = array("10",10,"dinheiro", "sucesso", "Sucesso", "alto","alto");

$array = array_unique($array,SORT_REGULAR);

print_r_pre($array);

function print_r_pre($arr){
	
	echo "<pre>";
	print_r($arr);
	echo "</pre>";
	
}

A saída do código acima será:

1
2
3
4
5
6
7
8
9
Array
(
    [0] => 10
    [1] => 10
    [2] => dinheiro
    [3] => sucesso
    [4] => Sucesso
    [5] => alto
)
Array
(
    [0] => 10
    [1] => 10
    [2] => dinheiro
    [3] => sucesso
    [4] => Sucesso
    [5] => alto
)

Como você pode ver, haviam dois valores “alto” e “alto” e primeiro foi mantido em detrimento do segundo. mas porque 10 e “10” continuaram no array? Bem, isso ocorre devido ao fato de que usei como segundo parâmetro da função array_unique a Constante SORT_REGULAR, a qual não converte os tipos de dados para fazer a equivalência. Assim sendo, como 10 é um número e “10” uma string, eles não foram considerados idênticos e portanto foram mantidos.

Sucesso e sucesso também foram mantidos pois um possui uma letra maiúsculo enquanto outro não. Veja mais a frente outras alternativas para SORT_REGULAR.

Como remover valores duplicados de um Array no PHP: SORT_STRING

1
2
3
4
5
$array = array("10",10,"dinheiro", "sucesso", "Sucesso","alto","alto");
 
$array = array_unique($array,SORT_STRING);
 
print_r_pre($array);
$array = array("10",10,"dinheiro", "sucesso", "Sucesso","alto","alto");

$array = array_unique($array,SORT_STRING);

print_r_pre($array);

A saída foi:

1
2
3
4
5
6
7
8
Array
(
    [0] => 10
    [2] => dinheiro
    [3] => sucesso
    [4] => Sucesso
    [5] => alto
)
Array
(
    [0] => 10
    [2] => dinheiro
    [3] => sucesso
    [4] => Sucesso
    [5] => alto
)

Agora, passando o parâmetro SORT_STRING, os valores são todos convertidos para strings e só depois comparados, com isso 10 e “10” passaram a ser idênticos e um deles foi removido.

Como remover valores duplicados de um Array: SORT_NUMERIC

1
2
3
4
5
$array = array("10",10,"dinheiro", "sucesso", "Sucesso","alto","alto");
 
$array = array_unique($array,SORT_NUMERIC);
 
print_r_pre($array);
$array = array("10",10,"dinheiro", "sucesso", "Sucesso","alto","alto");

$array = array_unique($array,SORT_NUMERIC);

print_r_pre($array);

O retorno impresso foi:

1
2
3
4
5
Array
(
    [0] => 10
    [2] => dinheiro
)
Array
(
    [0] => 10
    [2] => dinheiro
)

Agora temos uma comparação numérica e vários valores foram eliminados. Por quê? Simples, todos esses dados: “dinheiro”, “sucesso”, “Sucesso”,”alto”,”alto”, quando convertidos para um número resultaram em 0, e portanto somente o primeiro “dinheiro” foi mantido, os demais foram considerados repetitivos.

Há ainda o parâmetro SORT_LOCALE_STRING que faz uma comparação string baseado no local.

Como remover valores duplicados de um Array no PHP: Case Insensitive

Se você quer remover nomes idênticos porém com letras maiúsculas e minúsculas que não coincidem, use a seguinte dica:

1
2
3
4
5
6
7
$array = array("10",10,"dinheiro", "sucesso", "Sucesso","alto","alto");
 
$array = array_map("strtolower",$array);
 
$array = array_unique($array,SORT_REGULAR);
 
print_r_pre($array);
$array = array("10",10,"dinheiro", "sucesso", "Sucesso","alto","alto");

$array = array_map("strtolower",$array);

$array = array_unique($array,SORT_REGULAR);

print_r_pre($array);

Agora, antes da compraração, eu transformei as palavras todas para letras minúsculas e na sequência passei o array para array_unique. Assim sendo, Sucesso e sucesso serão considerados idênticos e apenas um deles permanecerá no array.

Se ficou alguma dúvida, deixeu teu comentário que tentaremos de ajudar.

Abraços e até já!

Como remover valores duplicados de um Array no PHP
4.8 (95.79%) 19 votes

Leave a Reply