PHP: Eliminar duplicados ARRAY

publicado por: Anonymous

Tengo armado un array de este tipo:

$array =array('epc' => "$tag",);

Al hacer un print de $array obtengo lo siguiente:

Array ( [epc] => 1792 ) Array ( [epc] => 1792 ) Array ( [epc] => 1212 ) Array ( [epc] => 1792 ) Array ( [epc] => 1792 ) Array ( [epc] => 1212 ) Array ( [epc] => 1792 ) Array ( [epc] => 1212 ) Array ( [epc] => 1792 ) Array ( [epc] => 1792 ) Array ( [epc] => 1792 ) Array ( [epc] => 1792 ) Array ( [epc] => 1792 ) Array ( [epc] => 1792 ) Array ( [epc] => 1212 ) Array ( [epc] => 1792 ) Array ( [epc] => 1792 )

Estoy buscando obtener como resultado únicamente los valores diferentes sin repetir es decir: 1792 y 1212

He probado utilizar métodos como array_unique, serialize, foreach y no he obtenido resultado, siempre veo todos los resultados.

El valor lo obtengo de la lectura de una línea de texto de un TXT.

$linea = fgets($fp1); 
$campo = explode(" ", $linea); 
$tag = $campo[1]; 
$tag = str_replace('"','',$tag); 
$tag =(string)(int)$tag;

solución

No me parece buena idea transportar un montón de datos para luego desecharlos, sobre todo si estás trabajando con un array voluminoso. Es decir, si tienes que enviar el array a otro sitio para luego borrar los duplicados… no es buena idea.

Puedes crear un array totalmente limpio en el origen y luego enviarlo donde quieras.

A mí particularmente no me gusta la forma desordenada en que array_unique construye el nuevo array.

Esta es una posibilidad.

He imaginado que tu línea es así:

"1792" "1792" "1212" "1792"

Vamos a limpiarla, quitando las "

Como quieres valores enteros, aplicaremos esto:

$arrEnteros = array_map('intval', explode(' ', $strLimpia));

Usaremos una estrategia con array_count_values el cual crea un array con las ocurrencias de cada valor. (Sería como hacer la función de array_unique.

$arrUnicos = array_count_values($arrEnteros);

Y crearemos nuestro array final, totalmente limpio y ordenado, con las claves epc y como valor las antiguas claves de $arrUnicos.


Código

VER DEMO

$linea = '"1792" "1792" "1212" "1792"';
$strLimpia=str_replace('"','',$linea);
$arrEnteros = array_map('intval', explode(' ', $strLimpia));
$arrUnicos = array_count_values($arrEnteros);
$arrFinal=array();
foreach ($arrUnicos  as $key => $value)  {
    $arrFinal[]=array("epc"=>$key);
}

print_r($arrFinal);
echo "VIENDO EL var_dump()";
var_dump($arrFinal);
?>

Resultado

El array se vería así:

  Array
(
    [0] => Array
        (
            [epc] => 1792
        )

    [1] => Array
        (
            [epc] => 1212
        )

)

Con el var_dump podemos apreciar que se crea con tipos de datos enteros:

VIENDO EL var_dump()

array(2) {
  [0]=>
  array(1) {
    ["epc"]=>
    int(1792)
  }
  [1]=>
  array(1) {
    ["epc"]=>
    int(1212)
  }
}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *