Como você pode criar uma multidimensional array única?

Eu tenho uma instalação de multidimensional array como a seguinte:

array( [0]=> array( ["name"]=> "Foo" ["slug"]=> "Bar" ) [1]=> array( ["name"]=> "Foo" ["slug"]=> "Bar" ) [2]=> array( ["name"]=> "Test 1" ["slug"]=> "test-1" ) [3]=> array( ["name"]=> "Test 2" ["slug"]=> "test-2" ) [4]=> array( ["name"]=> "Test 3" ["slug"]=> "test-3" ) ) 

Qual seria a melhor maneira de pesquisar pela área para duplicar valores em “nome” e removê-los, para que cada valor na multidimensional array seja único?

Desde já, obrigado!

Uma vez que todos oferecem alternativas, aqui está uma solução para o problema em questão. Às vezes, temos que trabalhar com os dados que temos, não reorganizá-lo da maneira que gostamos. Dito isto, isso irá remover todas as inputs subseqüentes da matriz que são duplicatas.

 $array = Array( Array( 'name' => 'Test 3', 'slug' => 'test-3' ), Array( 'name' => 'Foo', 'slug' => 'Bar' ), Array( 'name' => 'Foo', 'slug' => 'Bar' ), Array( 'name' => 'Test 1', 'slug' => 'test-1' ), Array( 'name' => 'Test 2', 'slug' => 'test-2' ), Array( 'name' => 'Test 3', 'slug' => 'test-3' ), ); var_dump($array); for ($e = 0; $e < count($array); $e++) { $duplicate = null; for ($ee = $e+1; $ee < count($array); $ee++) { if (strcmp($array[$ee]['name'],$array[$e]['name']) === 0) { $duplicate = $ee; break; } } if (!is_null($duplicate)) array_splice($array,$duplicate,1); } var_dump($array); 

O que ficará assim:

 array(6) { [0]=> array(2) { ["name"]=> string(6) "Test 3" ["slug"]=> string(6) "test-3" } [1]=> array(2) { ["name"]=> string(3) "Foo" ["slug"]=> string(3) "Bar" } [2]=> array(2) { ["name"]=> string(3) "Foo" ["slug"]=> string(3) "Bar" } [3]=> array(2) { ["name"]=> string(6) "Test 1" ["slug"]=> string(6) "test-1" } [4]=> array(2) { ["name"]=> string(6) "Test 2" ["slug"]=> string(6) "test-2" } [5]=> array(2) { ["name"]=> string(6) "Test 3" ["slug"]=> string(6) "test-3" } } array(4) { [0]=> array(2) { ["name"]=> string(6) "Test 3" ["slug"]=> string(6) "test-3" } [1]=> array(2) { ["name"]=> string(3) "Foo" ["slug"]=> string(3) "Bar" } [2]=> array(2) { ["name"]=> string(6) "Test 1" ["slug"]=> string(6) "test-1" } [3]=> array(2) { ["name"]=> string(6) "Test 2" ["slug"]=> string(6) "test-2" } } 

Você pode usar uma matriz associativa.

 $temp_array = array(); foreach ($array as &$v) { if (!isset($temp_array[$v['name']])) $temp_array[$v['name']] =& $v; } 

Isso cria uma matriz temporária, usando $v['name'] como a chave. Se já existe um elemento com a mesma chave, não é adicionado à matriz temporária.

Você pode converter a matriz associativa de volta para uma matriz seqüencial, usando

 $array = array_values($temp_array); 

Exemplo de código e saída: http://codepad.org/zHfbtUrl

 $array = array( 0 => array( "name"=> "Foo", "slug"=> "Bar" ), 1 => array( "name"=> "Foo", "slug"=> "Bar" ), 2 => array( "name"=> "Test 1", "slug"=> "test-1" ), 3 => array( "name"=> "Test 2", "slug"=> "test-2" ), 4 => array( "name"=> "Test 3", "slug"=> "test-3" ) ); function array_unique_by_key (&$array, $key) { $tmp = array(); $result = array(); foreach ($array as $value) { if (!in_array($value[$key], $tmp)) { array_push($tmp, $value[$key]); array_push($result, $value); } } return $array = $result; } array_unique_by_key($array, "name"); 

Basta olhar para o seu caso particular, eu recomendaria usar uma tabela de hash em vez de uma matriz bidimensional. Se você usar seu “nome” como a chave no hash, cada input seria única.

Existe uma necessidade específica para a multidimensional array?

 function multi_array_unique_by_value($array, $colon = '') { $ret_array = array(); $has_array = array(); foreach($array as $item) { $item_array = (array)$item; if(!in_array($item_array[$colon], $has_array)) { array_push($ret_array, $item); array_push($has_array, $item_array[$colon]); } } return $ret_array; } 

Você pode dar sua matriz aqui e dar um nome de cólon para tornar o único.

Neste código, você possui uma multidimensional array, definimos essa matriz, qual índice de coluna para nós, nós colocamos esses valores de coluna. E quando o mesmo valor, não está adicionando matriz de retorno.

Então, esta solução para array_unique para 1 coloumn.

Solução muito mais simples para sua multidimensional array.

 $unique = array_map('unserialize', array_unique(array_map('serialize', $array))); echo "
"; print_r($unique);