Remover elementos duplicados da matriz associativa em PHP

$result = array( 0=>array('a'=>1,'b'=>'Hello'), 1=>array('a'=>1,'b'=>'other'), 2=>array('a'=>1,'b'=>'other'), ); 

Se for duplicado removido, então o resultado é o seguinte:

 $result = array( 0=>array('a'=>1,'b'=>'Hello'), 1=>array('a'=>1,'b'=>'other') ); 

Poderia saber saber fazer isso?

obrigado

Independentemente do que os outros estão oferecendo aqui, você está procurando uma function chamada array_unique Docs . O importante aqui é definir o segundo parâmetro para SORT_REGULAR e, em seguida, o trabalho é fácil:

 array_unique($result, SORT_REGULAR); 

O significado do sinalizador SORT_REGULAR é:

compare itens normalmente (não altere os tipos)

E é isso que você quer. Você quer comparar o Arrays Docs aqui e não mude seu tipo para string (o que teria sido o padrão se o parâmetro não estiver configurado).

array_unique faz uma comparação rigorosa ( === em PHP), para arrays isso significa:

$a === $b TRUE se $ a e $ b tiverem os mesmos pares chave / valor na mesma ordem e dos mesmos tipos.

Saída ( Demo ):

 Array ( [0] => Array ( [a] => 1 [b] => Hello ) [1] => Array ( [a] => 1 [b] => other ) ) 

Primeiro, primeiro, você não pode usar o array_unique simples para esse problema porque array_unique trata os itens da matriz como cordas internamente e é por isso que os avisos “Não é possível converter Array to String” aparecerão ao usar array_unique para isso.

Então tente isso:

 $result = array( 0=>array('a'=>1,'b'=>'Hello'), 1=>array('a'=>1,'b'=>'other'), 2=>array('a'=>1,'b'=>'other') ); $unique = array_map("unserialize", array_unique(array_map("serialize", $result))); print_r($unique); 

Resultado:

 Array ( [0] => Array ( [a] => 1 [b] => Hello ) [1] => Array ( [a] => 1 [b] => other ) ) 

Serialização é muito útil para esses problemas.

Se você achar que é muita magia para você, confira essa postagem no blog

 function array_multi_unique($multiArray){ $uniqueArray = array(); foreach($multiArray as $subArray){ if(!in_array($subArray, $uniqueArray)){ $uniqueArray[] = $subArray; } } return $uniqueArray; } $unique = array_multi_unique($result); print_r($unique); 

Ironicamente, in_array está trabalhando para arrays, onde array_unique não.