2008-11-21 21 views

Respuesta

189

Use array_unique().

Ejemplo:

$array = array(1, 2, 2, 3); 
$array = array_unique($array); // Array is now (1, 2, 3) 
+13

@Ian - 'Tenga en cuenta que array_unique() es no destinado a funcionar en matrices multidimensionales. –

+13

Lo anterior conservará las claves de los elementos. Si quiere que se vuelvan a indexar, también aplique array_values: http://www.php.net/manual/en/function.array-values.php – CodeVirtuoso

+14

perfect ....... 'array_values ​​(array_unique ($ array))) 'hace lo perfecto para mí. Gracias @Freelancer –

-1

I haber hecho esto sin el uso de cualquier función.

$arr = array("1", "2", "3", "4", "5", "4", "2", "1"); 

$len = count($arr); 
for ($i = 0; $i < $len; $i++) { 
    $temp = $arr[$i]; 
    $j = $i; 
    for ($k = 0; $k < $len; $k++) { 
    if ($k != $j) { 
     if ($temp == $arr[$k]) { 
     echo $temp."<br>"; 
     $arr[$k]=" "; 
     } 
    } 
    } 
} 

for ($i = 0; $i < $len; $i++) { 
    echo $arr[$i] . " <br><br>"; 
} 
2

explode(",", implode(",", array_unique(explode(",", $YOUR_ARRAY))));

Esto se hará cargo de las asociaciones clave y serializar las claves para la nueva matriz resultante :-)

+1

¿Cuál sería el efecto de 'explotar (", "$ YOUR_ARRAY)' cuando '$ YOUR_ARRAY' es 'array (" 1 "," 2 "," 3 ")'? – kiamlaluno

+0

@kiamlaluno - :) y la respuesta es: ** Advertencia: explotar() espera que el parámetro 2 sea una cadena, una matriz dada en ... en línea ... ** –

+0

@JesseChisholm Sí, este era el punto, pero nadie notó el código, aparentemente. – kiamlaluno

3
$array = array("Ram","Thiru","Ram","Thiraviya"); 
$array = array_unique($array); 

Salida:

"Ram", "Thiru", "Thiraviya"

+3

Este es un duplicado completamente inútil de la respuesta aceptada de * 2008 *. –

4

veces array_unique() no es el camino, si desea obtener artículos únicos y duplicados ...

$unique=array("","A1","","A2","","A1",""); 
$duplicated=array(); 

foreach($unique as $k=>$v) { 

if(($kt=array_search($v,$unique))!==false and $k!=$kt) 
{ unset($unique[$kt]); $duplicated[]=$v; } 

} 

sort($unique); // optional 
sort($duplicated); // optional 

resultados en

array (0 => '', 1 => 'A1', 2 => 'A2',) /* $unique */ 

array (0 => '', 1 => '', 2 => '', 3 => 'A1',) /* $duplicated */ 
0
$arrDuplicate = array ("","",1,3,"",5); 
foreach(array_unique($arrDuplicate) as $v){ 
    if($v != ""){$arrRemoved = $v; }} 
print_r($arrRemoved); 
+0

Chicos esta sería una forma más inteligente de eliminar duplicados .......... – user1045247

+1

Esto realmente no explica nada, y no parece ser "más inteligente". – Sven

+0

Siempre puede explicar por qué editando su propia publicación, simplemente haga clic en el enlace "editar" al final de su respuesta. También sugiero que eche un vistazo a las preguntas frecuentes: http://stackoverflow.com/faq – ForceMagic

21
//Find duplicates 

$arr = array( 
    'unique', 
    'duplicate', 
    'distinct', 
    'justone', 
    'three3', 
    'duplicate', 
    'three3', 
    'three3', 
    'onlyone' 
); 

$unique = array_unique($arr); 
$dupes = array_diff_key($arr, $unique); 
    // array(5=>'duplicate', 6=>'three3' 7=>'three3') 

// count duplicates 

array_count_values($dupes); // array('duplicate'=>1, 'three3'=>2) 
1

Eso es una gran manera de para hacerlo. Puede que quieras asegurarte de que su salida vuelva a ser una matriz. Ahora solo muestra el último valor único.

Prueba esto:

$arrDuplicate = array ("","",1,3,"",5); 

foreach (array_unique($arrDuplicate) as $v){ 
    if($v != "") { $arrRemoved[] = $v; } 
} 
print_r ($arrRemoved); 
0
function arrayUnique($myArray) 
{ 
    $newArray = Array(); 
    if (is_array($myArray)) 
    { 
     foreach($myArray as $key=>$val) 
     { 
      if (is_array($val)) 
      { 
       $val2 = arrayUnique($val); 
      } 
      else 
      { 
       $val2 = $val; 
       $newArray=array_unique($myArray); 
       $newArray=deleteEmpty($newArray); 
       break; 
      } 
      if (!empty($val2)) 
      { 
       $newArray[$key] = $val2; 
      } 
     } 
    } 
    return ($newArray); 
} 

function deleteEmpty($myArray) 
{ 
    $retArray= Array(); 
    foreach($myArray as $key=>$val) 
    { 
     if (($key<>"") && ($val<>"")) 
     { 
      $retArray[$key] = $val; 
     } 
    } 
    return $retArray; 
} 
0

tratar este breve & dulce código -

$array = array (1,4,2,1,7,4,9,7,5,9); 
$unique = array(); 

foreach($array as $v){ 
    isset($k[$v]) || ($k[$v]=1) && $unique[] = $v; 
    } 

var_dump($unique); 

salida -

array(6) { 
    [0]=> 
    int(1) 
    [1]=> 
    int(4) 
    [2]=> 
    int(2) 
    [3]=> 
    int(7) 
    [4]=> 
    int(9) 
    [5]=> 
    int(5) 
} 
+0

¿Puede explicarme cómo funciona este código? –

+0

Abusar operadores booleanos para un flujo de control como este es innecesariamente confuso. Solo usa 'si'. –

0

i t se puede hacer a través de la función hice tres funciones duplicadas devuelve los valores que están duplicados en la matriz. segunda función única devuelve solo aquellos valores que son de media simple no repetida en matriz y tercera y función completa devuelve todos los valores pero no duplicados si hay algún valor duplican que convertirlo a singularizar

function duplicate($arr){ 
    $duplicate; 
    $count=array_count_values($arr); 
    foreach($arr as $key=>$value){ 
     if($count[$value]>1){ 
      $duplicate[$value]=$value; 
     } 

    } 
    return $duplicate; 

} 
function single($arr){ 
    $single; 
    $count=array_count_values($arr); 
    foreach($arr as $key=>$value){ 
     if($count[$value]==1){ 
      $single[$value]=$value; 
     } 
    } 
    return $single; 
} 
function full($arr,$arry){ 
    $full=$arr+$arry; 
    sort($full); 
    return $full; 

} 

}

0

Dependiendo del tamaño de la matriz, he encontrado

$array = array_values(array_flip(array_flip($array))); 

puede ser más rápido que array_unique.

+0

Más información sobre lo que está sucediendo aquí y sería más rápido con una matriz más grande o más pequeña. –

+0

La doble inversión eliminará los valores duplicados, porque una clave no puede existir dos veces; de lo contrario, se sobrescribe. Si cualquier valor se duplica y la matriz se invierte, la última ocurrencia (supongo) será el valor de la clave. – Goldentoa11

+0

En PHP 7, he notado que al voltear una matriz multidimensional más de una vez se pueden reordenar los elementos de la matriz inesperadamente. –

1

Lo único que funcionó para mí es:

$array = array_unique($array, SORT_REGULAR); 
0

La función array_unique lo hará por ti. Usted sólo necesita añadir la bandera SORT_REGULAR:

$items_thread = array_unique($items_thread, SORT_REGULAR); 
0
<?php 
$arr1 = [1,1,2,3,4,5,6,3,1,3,5,3,20];  
print_r(arr_unique($arr1)); 


function arr_unique($arr) { 
    sort($arr); 
    $curr = $arr[0]; 
    $uni_arr[] = $arr[0]; 
    for($i=0; $i<count($arr);$i++){ 
     if($curr != $arr[$i]) { 
     $uni_arr[] = $arr[$i]; 
     $curr = $arr[$i]; 
     } 
    } 
    return $uni_arr; 
} 
5

Uso array_values(array_unique($array));

array_unique: para la gama única array_values: para la indexación

0
if (@!in_array($classified->category,$arr)){   
            $arr[] = $classified->category; 
           ?> 

      <?php } endwhile; wp_reset_query(); ?> 

primer valor de comprobación de vez en matriz y encontrado mismo valor ignórelo

2

Podemos crear este tipo de matriz a utilizar este último valor se actualizará en la columna o valor clave y vamos a obtener un valor único de la matriz ...

$array = array (1,3,4,2,1,7,4,9,7,5,9); 
    $data=array(); 
    foreach($array as $value){ 

     $data[$value]= $value; 

    } 

    array_keys($data); 
    OR 
    array_values($data); 
0

Para quitar el valor duplicado de la matriz se puede utilizar Función array_unique ($ tu_array) de PHP

0

Eliminar los valores duplicados de una matriz asociativa en PHP.

$arrDup = Array ('0' => 'aaa-aaa' , 'SKU' => 'aaa-aaa' , '1' => '12/1/1' , 'date' => '12/1/1' , '2' => '1.15' , 'cost' => '1.15'); 

foreach($arrDup as $k => $v){ 
    if(!(isset ($hold[$v]))) 
     $hold[$v]=1; 
    else 
     unset($arrDup[$k]); 
} 

Array ([0] => aaa-aaa [1] => 12/1/1 [2] => 1,15)

0
$result = array(); 
foreach ($array as $key => $value){ 
    if(!in_array($value, $result)) 
    $result[$key]=$value; 
} 
Cuestiones relacionadas